/// <summary> /// Starts an asynchronous ping request and returns the result /// </summary> /// <returns></returns> public async Task <PingResult> StartPingAsync() { Ping sender = new Ping(); PingResult result = new PingResult() { TimeStamp = DateTime.Now, AddressOrIp = this.AddressOrIp }; PingReply reply; try { reply = await sender.SendPingAsync(this.AddressOrIp); result.AddReplyData(reply); } catch (Exception b) { result.AddReplyException(b); } finally { //release resource sender.Dispose(); await Task.Delay(_intervalBetweenPings); } //return the ping results return(result); }
/// <summary> /// adds a new ping results to the stats /// </summary> /// <param name="result"></param> public void Add(PingResult result) { if (String.IsNullOrEmpty(result.AddressOrIp)) { return; } if (result.Status.Equals(PingResult.StatusMessage.SUCCESS)) { //On successful packet send, determine if max latency increased if (result.Latency > _maxLatency) { MaxLatency = result.Latency; } //Latency is less then 1, set to zero if (result.Latency < 1) { result.Latency = 1; } _successfulPings.Add(result.Latency); OnPropertyChanged(nameof(AverageLatency)); } else // errors or time outs increase packets lost value { _packetsLost++; } PacketsSent++; }
/// <summary> /// Log the results of a ping to a text file /// </summary> /// <param name="pingResults"></param> /// <param name="path"></param> public static void LogToTextFile(PingResult pingResults, string path = null) { //path unset, set it if (String.IsNullOrEmpty(path)) { path = Path; } //validate pingresult and directory exists if (Object.Equals(pingResults, null) && !Directory.Exists(path)) { return; } string fileName = DateTime.Today.ToShortDateString().Substring(0).Replace('/', '-') + ".log"; using (StreamWriter fs = File.AppendText(path + fileName)) { fs.WriteLine(pingResults.ToString()); } }