Beispiel #1
0
        public override void SendPacket(BitWriter w, TPacket packet)
        {
            var ordered = new OrderedPacket <TPacket>();

            ordered.orderId = nextSendOrderId++;
            ordered.packet  = packet;
            reliableChannel.SendPacket(w, ordered);
        }
Beispiel #2
0
            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);
            }
Beispiel #3
0
        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;
            }
        }