예제 #1
0
        public void AddPing(PingReplyWrapper reply, PingInfo info = null)
        {
            var result = reply != null && reply.Status == System.Net.NetworkInformation.IPStatus.Success
                ? reply.RoundtripTime
                : (long?)null;

            IsNetworkAccessible = result != null;
            if (info == null)
            {
                info = new PingInfo {
                    Time = DateTime.Now
                };
            }
            lock (Pings.GetLock())
            {
                Pings.Add(info);
            }
            info.Roundtrip = result;
            List <PingInfo> lastPings;

            lock (Pings.GetLock())
            {
                lastPings = Pings.Where(p => p.Time > DateTime.Now - Config.Instance.PingGraphTimeSize).ToList();
            }
            var lastPingsSuccess = lastPings.Where(p => p.Roundtrip != null).ToList();

            NetworkAvailability = 100.0 * lastPingsSuccess.Count / lastPings.Count;
            NetworkAvgRoundtrip = lastPingsSuccess.Count == 0
                ? 0
                : (long)lastPingsSuccess.Average(p => p.Roundtrip.Value);
        }
예제 #2
0
 public virtual void StopSW()
 {
     _stopWatch.Stop();
     if (_stopWatch.ElapsedMilliseconds > 0)
     {
         Pings.Add(_stopWatch.ElapsedMilliseconds);
     }
     _stopWatch.Reset();
 }
예제 #3
0
 public void ProcessParser(IServerQueryParser parser)
 {
     if (Pings.Count == 0)
     {
         Pings.Add(Common.MagicPingValue);
     }
     Result          = parser.ParsePackets(this);
     ReceivedPackets = null;
     Succeed();
 }
예제 #4
0
        public void Decode(NetIncomingMessage im)
        {
            var count = im.ReadInt32();

            for (var i = 0; i < count; i++)
            {
                var guid = Guid.Parse(im.ReadString());
                var ping = im.ReadInt32();

                Pings.Add(guid, ping);
            }
        }