public static void Ping(string host, float timeOut = 4f, int pingTimes = 4, Action <string, PingStatistics> resultCallBack = null) { StringBuilder builder = new StringBuilder(); builder.Append("Start Ping " + host + "\n"); UnityPing.CreatePing(host, (res) => { string stateInfo = res.isSuccess ? "Success" : res.errorReason.ToString(); builder.Append("return:" + stateInfo + " time:" + res.pingTime + "\n"); }, OnComplete: (pingResults) => { int passTimes = 0; int maxTime = 0; int minTime = -1; int allTime = 0; int caculateTimes = 0; string ip = ""; foreach (var item in pingResults) { ip = item.ip; if (item.isSuccess) { passTimes++; if (maxTime < item.pingTime) { maxTime = item.pingTime; } if (minTime == -1) { minTime = item.pingTime; } if (minTime > item.pingTime) { minTime = item.pingTime; } allTime += item.pingTime; caculateTimes++; } } int averagePingTime = caculateTimes == 0? 0:(allTime / caculateTimes); PingStatistics statistics = new PingStatistics(host, ip, pingResults.Length, passTimes, maxTime, minTime, averagePingTime); builder.Append("Ping Times:" + statistics.pingTimes + " Pass Times:" + statistics.pingPass + "\n"); if (passTimes > 0) { builder.Append("Min Ping:" + statistics.minPingTime + "ms Max Ping:" + statistics.maxPingTime + "ms AVG:" + statistics.averagePingTime + "\n"); } if (resultCallBack != null) { resultCallBack(builder.ToString(), statistics); } else { Debug.Log(builder); } }, timeOut: timeOut, runTimes: pingTimes); }
public void ComputeMedian_OddSet_isEqual20() { //Arrange var pingstat = new PingStatistics(); //Act var result = pingstat.ComputeMedian(this.oddset); //Assert Assert.AreEqual(20, result); }
public void IdentifyUnique_OddSet_IsEqualtoEvenSet() { //Arrange var pingstat = new PingStatistics(); //Act var result = pingstat.IdentifyUnique(this.oddset); //Assert CollectionAssert.AreEqual(this.evenset, result); }
public void ComputeMedian_EvenSet_isEqual30() { //Arrange var pingstat = new PingStatistics(); //Act var result = pingstat.ComputeMedian(this.evenset); //Assert Assert.AreEqual(30, result); }
public void IdentifyThirdQuartile_EvenSet_IsEqualto10() { //Arrange var pingstat = new PingStatistics(); //Act var result = pingstat.IdentifyThirdQuartile(this.evenset); //Assert Assert.AreEqual(40, result); }
public void ComputeStdDeviation_EvenSet_IsEqualto250() { //Arrange var pingstat = new PingStatistics(); //Act var result = pingstat.ComputeStdDeviation(this.evenset); //Assert Assert.AreEqual(15.81, Math.Round(result, 2)); }
public void ComputeVariance_EvenSet_IsEqualto250() { //Arrange var pingstat = new PingStatistics(); //Act var result = pingstat.ComputeVariance(this.evenset); //Assert Assert.AreEqual(250, result); }
public void ComputeVariance_OddSet_IsEqualto264() { //Arrange var pingstat = new PingStatistics(); //Act var result = pingstat.ComputeVariance(this.oddset); //Assert Assert.AreEqual(264, result); }
private PingStatistics CalculatePingStatistics(List <PingReply> repies) { var roundTrips = repies.Select(x => x.RoundtripTime).ToList(); PingStatistics statistics = new PingStatistics( repies.Select(x => x.ConvertToPingResult()).ToList(), (repies.Count(x => x.Status == IPStatus.Success) / repies.Count) * 100, (int)Enumerable.Max(roundTrips), (int)Enumerable.Min(roundTrips), (int)Math.Floor(Enumerable.Average(roundTrips))); return(statistics); }
private static void SelectPingResult(List <PingStatistics> pingStatistics, Action <PingStatistics> resultCallBack) { if (pingStatistics.Count <= 1) { if (pingStatistics.Count == 0) { if (resultCallBack != null) { resultCallBack(default(PingStatistics)); } } else { if (resultCallBack != null) { resultCallBack(pingStatistics[0]); } } } else { List <PingStatistics> tempStatistics = new List <PingStatistics>(); //选取ping通率在50%及以上的 foreach (var ss in pingStatistics) { if (ss.pingPass * 1f / ss.pingTimes >= 0.5f) { tempStatistics.Add(ss); } } if (tempStatistics.Count == 0) { tempStatistics.AddRange(pingStatistics); } //选取平均Ping最少的 PingStatistics minPing = tempStatistics[0]; foreach (var ss in tempStatistics) { if (ss.averagePingTime < minPing.averagePingTime && ss.pingPass > 0) { minPing = ss; } } if (resultCallBack != null) { resultCallBack(minPing); } } }
private void _pinger_StatisticsUpdated ( object sender, EventArgs e ) { PingStatistics statistics = _pinger.Statistics; if (statistics.Data.Count > 1500) { while (statistics.Data.Count > 1000) { statistics.Data.Dequeue(); } } _plotter.Invalidate(); }