Example #1
0
        private void OnReceiveCallback(IAsyncResult result)
        {
            if (IsTerminated)
            {
                return;
            }

            _stream.EndRead(result);

            byte[] buff = new byte[_buffer.Length];
            _buffer.CopyTo(buff, 0);
            _crypt.decrypt(buff);
            TrafficUp += _buffer.Length;

            PacketHandler.handlePacket(this, buff);

            new System.Threading.Thread(read).Start();
        }
Example #2
0
        public L2Packet handlePacket(byte[] rawPacket, bool fromServer)
        {
            if (rawPacket.Length < 3) // Valid data?
            {
                return(null);
            }
            if (fromServer)
            {
                serverCrypt.decrypt(rawPacket, 2, rawPacket.Length);
            }
            else
            {
                clientCrypt.decrypt(rawPacket, 2, rawPacket.Length);
            }

            ByteBuffer binPacket = new ByteBuffer(rawPacket);

            binPacket.ReadBytes(2); // Read 2 bytes ahead
            int opcode       = binPacket.ReadByte();
            int secondOpCode = -1;

            switch (state)
            {
            case GameClientState.CONNECTED:
                // Vom Server (ServerPacket)
                if (fromServer)
                {
                    switch (opcode)
                    {
                    case 0x2e:             // KeyPacket (Contains key, NOT Encrypted xD )
                        this.onKeyPacket(binPacket);
                        break;

                    case 0x09:             // CharSelectionInfo
                        this.state = GameClientState.AUTHED;
                        break;
                    }
                }
                // Vom Clienten
                else
                {
                }
                break;

            case GameClientState.AUTHED:
                if (fromServer)
                {
                    switch (opcode)
                    {
                    case 0x73:
                        this.state = GameClientState.IN_GAME;
                        //Console.Out.WriteLine(Util.printData(binPacket));
                        break;
                    }
                }
                else
                {
                    switch (opcode)
                    {
                    case 0x0d:
                        // get secondOpCode and set
                        secondOpCode = binPacket.ReadInt16();
                        break;

                    case 0x12:             // CharacterSelect
                        break;
                    }
                }
                break;

            case GameClientState.IN_GAME:
                if (fromServer)
                {
                    switch (opcode)
                    {
                    case 0xfe:
                        // get secondOpCode
                        secondOpCode = binPacket.ReadInt16();
                        break;

                    case 0x0b:             //CharSelected
                        this.onCharSelected(binPacket);
                        break;
                    }
                }
                else
                {
                    switch (opcode)
                    {
                    case 0x1f:
                        break;

                    case 0xd0:
                        // get secondOpCode
                        secondOpCode = binPacket.ReadInt16();
                        break;
                    }
                }
                break;
            }


            if (fromServer)
            {
                return(new GameServerPacket(binPacket));
            }
            else
            {
                return(new ClientPacket(binPacket));
            }
        }