Files

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);
}
}
}
}
}