private void OnMessageReceived(object sender, MessageEventArgs e) { if (State == 0) { KeyMessage keyMessage = (KeyMessage)e.Message; System.Buffer.BlockCopy(keyMessage.Key, 0, Session.ClientKey1, 0, 128); Client.SendMessage(new KeyMessage { Key = Session.ServerKey1 }); State++; return; } if (State == 1) { KeyMessage keyMessage = (KeyMessage)e.Message; System.Buffer.BlockCopy(keyMessage.Key, 0, Session.ClientKey2, 0, 128); Client.SendMessage(new KeyMessage { Key = Session.ServerKey2 }); Session.Init(); Client.WireProtocol = new GameProtocol(Session); State++; return; } GameMessage message = (GameMessage)e.Message; Buffer = message.Data; if (OpCodes.Recv.ContainsKey(message.OpCode)) { string opCodeLittleEndianHex = BitConverter.GetBytes(message.OpCode).ToHex(); Logger.WriteLine(LogState.Debug, "C->S opCode: 0x{0}{1} [{2}]", opCodeLittleEndianHex.Substring(2), opCodeLittleEndianHex.Substring(0, 2), Buffer.Length); Logger.WriteLine(LogState.Debug, "Data:\n{0}", Buffer.FormatHex()); GlobalLogic.PacketReceived(GameAccount, OpCodes.Recv[message.OpCode], Buffer); ((ARecvPacket)Activator.CreateInstance(OpCodes.Recv[message.OpCode])).Process(this); } else { string opCodeLittleEndianHex = BitConverter.GetBytes(message.OpCode).ToHex(); Logger.WriteLine(LogState.Debug, "C->S Unknown opCode: 0x{0}{1} [{2}]", opCodeLittleEndianHex.Substring(2), opCodeLittleEndianHex.Substring(0, 2), Buffer.Length); Logger.WriteLine(LogState.Debug, "Data:\n{0}", Buffer.FormatHex()); GlobalLogic.PacketReceived(GameAccount, null, Buffer); } }