public bool read(IBaseClient client, SuperPacket <PQ> superpacket, IMarshal marshal) { timestampBlockId = ExpectedTickId; timestamp = DateTimeExtensions.now(); if (!client.hasPendingSuperPackets()) { if (++sinceLastRecv >= Constants.MaxBlocksUntilDisconnection) { client.disconnect(); return(false); } marshal.Update(client, ExpectedTickId); ExpectedTickId = Overflow.inc(ExpectedTickId); return(false); } sinceLastRecv = 0; ushort expectedId = ExpectedTickId; if (!Constants.UseKumoQueues) { ExpectedTickId = Overflow.sub(ExpectedTickId, bufferSize); } while (client.hasPendingSuperPackets() && !Overflow.ge(client.firstSuperPacketTickId(), expectedId)) { read_impl(client, superpacket, marshal); } marshal.Update(client, ExpectedTickId); ExpectedTickId = Overflow.inc(ExpectedTickId); return(true); }