Esempio n. 1
0
        //Update function
        private void UpdateLogic()
        {
            while (IsRunning)
            {
                long startTime = DateTime.UtcNow.Ticks;
#if DEBUG
                if (SimulateLatency)
                {
                    var time = DateTime.UtcNow;
                    lock (_pingSimulationList)
                    {
                        for (int i = 0; i < _pingSimulationList.Count; i++)
                        {
                            var incomingData = _pingSimulationList[i];
                            if (incomingData.TimeWhenGet <= time)
                            {
                                DataReceived(incomingData.Data, incomingData.Data.Length, incomingData.EndPoint);
                                _pingSimulationList.RemoveAt(i);
                                i--;
                            }
                        }
                    }
                }
#endif

#if STATS_ENABLED
                ulong totalPacketLoss = 0;
#endif
                //Process acks
                lock (_peers)
                {
                    for (int i = 0; i < _peers.Count; i++)
                    {
                        var netPeer = _peers[i];
                        if (netPeer.ConnectionState == ConnectionState.Disconnected)
                        {
                            _peers.RemoveAt(i);
                            i--;
                        }
                        else
                        {
                            netPeer.Update(UpdateTime);
#if STATS_ENABLED
                            totalPacketLoss += netPeer.Statistics.PacketLoss;
#endif
                        }
                    }
                }

#if STATS_ENABLED
                Statistics.PacketLoss = totalPacketLoss;
#endif
                int sleepTime = UpdateTime - (int)((DateTime.UtcNow.Ticks - startTime) / TimeSpan.TicksPerMillisecond);
                if (sleepTime > 0)
                {
                    Thread.Sleep(sleepTime);
                }
            }
        }
Esempio n. 2
0
        private void RemovePeerAt(int idx)
        {
#if WINRT && !UNITY_EDITOR
            var endPoint = _peers[idx].EndPoint;
            _socket.RemovePeer(endPoint);
#endif
            _peers.RemoveAt(idx);
        }