BlitsMe.TransportEmulator.ProxyTransportManager.PhysicalLayerPump C# (CSharp) Méthode

PhysicalLayerPump() private méthode

private PhysicalLayerPump ( ) : void
Résultat void
        private void PhysicalLayerPump()
        {
            while (true)
            {
                lock (PhysicalLayerLock)
                {
                    while (PhysicalLayer.Count == 0)
                        Monitor.Wait(PhysicalLayerLock);
                }
                long currentLatencyValue = _transportForm.Latency;
                while (PhysicalLayer.Count > 0)
                {
                    var packetHolder = (PhysicalPacketHolder)PhysicalLayer.Dequeue();
                    // drop the packet (maybe)
                    if (rand.Next(100) < _transportForm.PacketLoss)
                    {
                        Logger.Warn("Ooops dropped a packet : " + packetHolder._packet);
                        if (_client)
                            _transportForm.ClientPacketLoss++;
                        else
                            _transportForm.ServerPacketLoss++;
                    }
                    else
                    {

                        long latencySoFar = Environment.TickCount - packetHolder._sendTime;
                        // latency is done here
                        if (latencySoFar < currentLatencyValue)
                        {
                            //Logger.Info("Implementing remainder latency of " + (currentLatencyValue - latencySoFar) + "ms");
                            Thread.Sleep(TimeSpan.FromMilliseconds(currentLatencyValue - latencySoFar));
                        }
                        // Now pass this onto my Transport
                        Logger.Info("Received packet [size=" + packetHolder._packet.Payload.Length +
                                    "] from physical layer, " + PhysicalLayer.Count + " still on the wire.");
                        TCPTransport.ProcessPacket(packetHolder._packet.GetBytes());
                        var actualLatency = Environment.TickCount - packetHolder._sendTime;
                        if (_client)
                            _transportForm.ClientLatency = actualLatency;
                        else
                            _transportForm.ServerLatency = actualLatency;
                    }
                }

            }
        }