58 lines
1.0 KiB
C#
58 lines
1.0 KiB
C#
using NLog;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Net.Sockets;
|
|
using System.Text;
|
|
using System.Threading;
|
|
|
|
namespace ESPServer
|
|
{
|
|
class UnitPinger
|
|
{
|
|
const int PING_INTERVAL = 30 * 1000; // 30 seconds
|
|
const int UNIT_TARGET_PORT = 7000;
|
|
|
|
private readonly Logger logger = LogManager.GetCurrentClassLogger();
|
|
UnitsDatabase db;
|
|
|
|
public UnitPinger(UnitsDatabase db)
|
|
{
|
|
this.db = db;
|
|
}
|
|
|
|
public void Start()
|
|
{
|
|
var t = new Thread(new ThreadStart(this.Run));
|
|
t.Start();
|
|
}
|
|
|
|
private void Run()
|
|
{
|
|
logger.Info("Started UnitPinger");
|
|
while (true)
|
|
{
|
|
try
|
|
{
|
|
Thread.Sleep(PING_INTERVAL);
|
|
var ips = db.GetUnitIPs();
|
|
foreach (var kv in ips)
|
|
{
|
|
var ip = kv.Value;
|
|
using (var udpClient = new UdpClient())
|
|
{
|
|
udpClient.Connect(ip, UNIT_TARGET_PORT);
|
|
var data = Encoding.ASCII.GetBytes("ping");
|
|
udpClient.Send(data, data.Length);
|
|
udpClient.Close();
|
|
}
|
|
}
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
logger.Error(e.Message);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|