Beispiel #1
0
        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);
            }
        }