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