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); }
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); }
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); }
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); }
private void OnAccepted(Session session) { // 초기화 _user = null; // 각 8비트마다 0이 나오지 않는 임의 숫자 생성 Int32 seed = 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); } SecurePacket ntfPacket = new SecurePacket(Protocol.GetID("CS_Hello_Ntf")); ntfPacket.PutInt32(ResultCode.Ok); ntfPacket.PutInt32((Int32)ServerType.GameServer); ntfPacket.PutInt32(seed); ntfPacket.Encrypt(ServerMain.AES_IV, ServerMain.AES_Key); base.SendPacket(ntfPacket); }