Exemple #1
0
        private void ProcessPayload(byte[] data)
        {
            using (var stream = new MemoryStream(data))
                using (var reader = new BinaryReader(stream))
                {
                    while (stream.Remaining() != 0L)
                    {
                        // no packet on deck waiting for additional information, new data will be part of a new packet
                        if (onDeck == null)
                        {
                            uint size = reader.ReadUInt32();
                            onDeck = new FragmentedBuffer(size);
                        }

                        onDeck.Populate(reader);
                        if (onDeck.IsComplete)
                        {
                            BasePacket packet;
                            if (receivedFirstPacket)
                            {
                                packet = new ClientPacket(onDeck.Data);
                            }
                            else
                            {
                                // first packet doesn't follow the standard structure
                                packet = new ClientFirstPacket(onDeck.Data);
                                receivedFirstPacket = true;
                            }

                            incomingPackets.Enqueue(packet);
                            onDeck = null;
                        }
                    }
                }
        }
Exemple #2
0
 public PacketOnDeck(PacketHeader header)
 {
     Header = header;
     Buffer = new FragmentedBuffer(header.Length - PacketHeader.Size);
 }