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; } } } }
public PacketOnDeck(PacketHeader header) { Header = header; Buffer = new FragmentedBuffer(header.Length - PacketHeader.Size); }