public override void SendPacket(BitWriter w, TPacket packet) { var ordered = new OrderedPacket <TPacket>(); ordered.orderId = nextSendOrderId++; ordered.packet = packet; reliableChannel.SendPacket(w, ordered); }
public override OrderedPacket <TPacket> CreatePacket(byte id) { if (!packetTypes.TryGetValue(id, out var type)) { return(null); } var packet = (TPacket)Activator.CreateInstance(type); var ordered = new OrderedPacket <TPacket>(); ordered.packet = packet; return(ordered); }
private void ReceiveOrderedPacket(OrderedPacket <TPacket> ordered) { if (ordered.orderId < nextReceiveOrderId) { return; // already received } if (ordered.orderId == nextReceiveOrderId) { nextReceiveOrderId++; doReceivePacket(ordered.packet); while (receivedPackets.TryGetValue(nextReceiveOrderId, out var packet)) { receivedPackets.Remove(nextReceiveOrderId); doReceivePacket(packet); nextReceiveOrderId++; } } else { receivedPackets[ordered.orderId] = ordered.packet; } }