private void read_impl(IBaseClient client, SuperPacket <PQ> superpacket, IMarshal marshal) { SuperPacketReader reader = client.popPendingSuperPacket(); // Handshake process skips all procedures, including order if (reader.HasFlag(SuperPacketFlags.Handshake)) { // Nothing to do here, it's a handshake packet // TODO(gpascualg): We don't need to add them at all LastTickIdRead = reader.tickId(); return; } Debug.Assert(!IsOutOfOrder(reader.tickId()), "Should never have out of order packets"); if (Overflow.sub(ExpectedTickId, reader.tickId()) > Constants.MaximumBlocksUntilResync) { superpacket.SetFlag(SuperPacketFlags.Handshake); } if (LastTickIdRead > reader.tickId()) { loopCounter = (byte)(loopCounter + 1); } LastTickIdRead = reader.tickId(); reader.handlePackets <PQ, IBaseClient>(this, marshal, client); }