using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using SafeMobileLib; using System.Net.NetworkInformation; namespace SDRgateway { class PingThread { string ip; private int interval; bool status; private Thread t_Ping; /// /// ping class /// /// dest IP /// interval for pings in seconds public PingThread(string ip, int interval) { this.ip = ip; this.interval = interval; status = false; t_Ping = new Thread(new ThreadStart(Worker)); t_Ping.IsBackground = true; t_Ping.Start(); } public void Worker() { SM.Debug("PingThread started for " + ip + " interval:" + interval); int count = 0; while (true) { try { Thread.Sleep(Program.cfg.SDR_ping * 1000); DateTime time = DateTime.Now; //SM.Debug(ip + " ping sent!"); Ping pingSender = new Ping(); PingReply pReply = pingSender.Send(ip); if (pReply.Status == IPStatus.Success) { if (status == false) //going from OFF->ON OnNewPingComplete(true, ip); status = true; } else //if (pReply.Status == IPStatus.TimedOut) { if (status == true) //going from ON->OFF OnNewPingComplete(false, ip); status = false; } if (count++ % 10 == 0) SM.Debug(String.Format("Gateway {0} is {1}", ip, (status ? "ONLINE" : "OFFLINE"))); //SM.Debug(ip + " ping delta:" + (DateTime.Now -time) + " status:" + status); } catch { Console.WriteLine("*** Could not ping: " + ip + " *****"); } Thread.Sleep(interval); } } public delegate void NewPingCompleteDEl(bool status, string ip); public event NewPingCompleteDEl OnNewPingComplete; } }