Пример #1
0
        protected override async Task HandleIncomingPacket()
        {
            const int packetHeaderLength = 6;
            var       header             = new byte[packetHeaderLength];
            var       headerReadLength   = await this.ReadInto(header);

            if (headerReadLength != packetHeaderLength)
            {
                this.logger.LogError($"Invalid packet header length: {headerReadLength} -> disconnected");
                this.isConnected = false;
                return;
            }

            var(length, opcode) = this.Decode(header);

            // Remove the remaining 4 header bytes from length
            length -= 4;

            this.logger.LogTrace($"{this.ClientInfo} - Recv {opcode} ({length} bytes)");
            var packet = new byte[length];

            if (length > 0)
            {
                // TODO: Read in while loop until length is reached?
                var packetReadLength = await this.ReadInto(packet);

                if (length != packetReadLength)
                {
                    this.logger.LogError($"Expected packet read length to be {length}, but was {packetReadLength} -> disconnected");
                    this.isConnected = false;
                    return;
                }
            }

            var handler = packetHandler.GetHandler(opcode);

            await handler(new PacketHandlerContext
            {
                Client         = this,
                Packet         = packet,
                Opcode         = opcode,
                World          = this.world,
                AccountService = this.accountService,
            });
        }
Пример #2
0
        protected override async Task HandlePacket(byte[] data)
        {
            for (var i = 0; i < data.Length; i++)
            {
                // TODO: Spans instead of array.copy!
                var header = new byte[6];
                Array.Copy(data, i, header, 0, 6);

                var(length, opcode) = this.DecodePacket(header);

                logger.LogOpcode(opcode, length);

                var packet = new byte[length];
                Array.Copy(data, i + 6, packet, 0, length - 4);

                var handler = packetHandler.GetHandler(opcode);
                await handler(this, packet);

                i += 2 + (length - 1);
            }
        }