상속: StreamBuffer
예제 #1
0
 private void OnAccepted(Session session)
 {
     SecurePacket ntfPacket = new SecurePacket(Protocol.GetID("CS_Hello_Ntf"));
     ntfPacket.PutInt32(ResultCode.Ok);
     ntfPacket.PutInt32((Int32)ServerType.AuthServer);
     SendPacket(ntfPacket);
 }
예제 #2
0
        private void OnCS_IMC_Enter_Req(SecurePacketRequest reqPacket)
        {
            SecurePacketResponse resPacket = new SecurePacketResponse(reqPacket);

            try
            {
                if (_user.CastChannel != null)
                    throw new AegisException(ResultCode.IMC_InChannel);

                Int32 channelNo = reqPacket.GetInt32();
                _user.CastChannel = CastChannel.GetChannel(channelNo);

                _user.CastChannel.Enter(_user);
                {
                    SecurePacket ntfPacket = new SecurePacket(Protocol.GetID("CS_IMC_EnteredUser_Ntf"));
                    ntfPacket.PutInt32(ResultCode.Ok);
                    ntfPacket.PutInt32(_user.UserNo);
                    ntfPacket.PutStringAsUtf16(_user.Profile.Nickname);

                    _user.CastChannel.Broadcast(ntfPacket, _user);
                }

                resPacket.ResultCodeNo = ResultCode.Ok;
                resPacket.PutInt32(_user.CastChannel.ChannelNo);
                resPacket.PutStringAsUtf16(_user.CastChannel.Name);
            }
            catch (AegisException e)
            {
                resPacket.ResultCodeNo = e.ResultCodeNo;
            }

            SendPacket(resPacket);
        }
예제 #3
0
        private void OnAccepted(Session session)
        {
            SecurePacket ntfPacket = new SecurePacket(Protocol.GetID("CS_Hello_Ntf"));
            Int32 seed = 0;

            //  각 8비트마다 0이 나오지 않는 임의 숫자 생성
            seed |= Randomizer.NextNumber(1, 255) << 24;
            seed |= Randomizer.NextNumber(1, 255) << 16;
            seed |= Randomizer.NextNumber(1, 255) << 8;
            seed |= Randomizer.NextNumber(1, 255);

            //  패킷 암호화 키 생성
            {
                String characterSet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz";
                char[] ascii = new char[16];

                for (Int32 i = 0; i < 16; ++i)
                {
                    Int32 val = seed & (0x6E << i);
                    ascii[i] = characterSet[(val % characterSet.Length)];
                }
                _aesIV = new string(ascii);

                for (Int32 i = 0; i < 16; ++i)
                {
                    Int32 val = seed & (0xF4 << i);
                    ascii[i] = characterSet[(val % characterSet.Length)];
                }
                _aesKey = new string(ascii);
            }

            ntfPacket.PutInt32(seed);
            ntfPacket.Encrypt(Global.AES_IV, Global.AES_Key);
            base.SendPacket(ntfPacket);
        }
예제 #4
0
        /// <summary>
        /// 이 SecurePacket 객체와 동일한 내용의 새로운 객체를 생성합니다.
        /// </summary>
        /// <returns>현재 SecurePacket의 데이터가 복제된 객체</returns>
        public override StreamBuffer Clone()
        {
            SecurePacket packet = new SecurePacket(this);

            packet.Read(ReadBytes);

            return(packet);
        }
예제 #5
0
        public void ForceClose(String message)
        {
            SecurePacket ntfPacket = new SecurePacket(Protocol.GetID("CS_Auth_ForceClosing_Ntf"));
            ntfPacket.PutStringAsUtf16(message);

            SendPacket(ntfPacket, (sentPacket) =>
            {
                Close();
            });
        }
예제 #6
0
        private void OnCS_IMC_Leave_Req(SecurePacketRequest reqPacket)
        {
            SecurePacketResponse resPacket = new SecurePacketResponse(reqPacket);

            try
            {
                if (_user.CastChannel == null)
                    throw new AegisException(ResultCode.IMC_NotInChannel);

                _user.CastChannel.Leave(_user);
                {
                    SecurePacket ntfPacket = new SecurePacket(Protocol.GetID("CS_IMC_LeavedUser_Ntf"));
                    ntfPacket.PutInt32(ResultCode.Ok);
                    ntfPacket.PutInt32(_user.UserNo);

                    _user.CastChannel.Broadcast(ntfPacket, _user);
                }

                _user.CastChannel = null;
                resPacket.ResultCodeNo = ResultCode.Ok;
            }
            catch (AegisException e)
            {
                resPacket.ResultCodeNo = e.ResultCodeNo;
            }

            SendPacket(resPacket);
        }
예제 #7
0
        private void OnCS_IMC_SendMessage_Req(SecurePacketRequest reqPacket)
        {
            SecurePacketResponse resPacket = new SecurePacketResponse(reqPacket);
            Int32 targetUserNo = reqPacket.GetInt32();

            if (_user.CastChannel == null)
            {
                resPacket.ResultCodeNo = ResultCode.IMC_NotInChannel;
                SendPacket(resPacket);
                return;
            }

            try
            {
                SecurePacket ntfPacket = new SecurePacket(Protocol.GetID("CS_IMC_Message_Ntf"), (UInt16)reqPacket.ReadableSize);
                ntfPacket.PutInt32(ResultCode.Ok);
                ntfPacket.PutInt32(_user.UserNo);
                ntfPacket.Write(reqPacket.Buffer, reqPacket.ReadBytes, reqPacket.ReadableSize);

                if (targetUserNo != 0)
                {
                    User targetUser = _user.CastChannel.GetUser(targetUserNo);
                    targetUser.SendPacket(ntfPacket);
                }
                else
                    _user.CastChannel.Broadcast(ntfPacket);

                resPacket.ResultCodeNo = ResultCode.Ok;
            }
            catch (AegisException e)
            {
                resPacket.ResultCodeNo = e.ResultCodeNo;
            }

            SendPacket(resPacket);
        }
예제 #8
0
        /// <summary>
        /// 이 SecurePacket 객체와 동일한 내용의 새로운 객체를 생성합니다.
        /// </summary>
        /// <returns>현재 SecurePacket의 데이터가 복제된 객체</returns>
        public override StreamBuffer Clone()
        {
            SecurePacket packet = new SecurePacket(this);
            packet.Read(ReadBytes);

            return packet;
        }