ln.skyscanner/services/CheckService.cs

66 lines
2.2 KiB
C#

using System;
using ln.application;
using System.Threading;
using ln.logging;
using ln.application.service;
namespace ln.skyscanner.services
{
public class CheckService : ApplicationServiceBase
{
public CheckService()
:base("Check Service")
{
DependOnService<EntityService>();
}
public override void ServiceMain(IApplicationInterface applicationInterface)
{
long nextMinute = DateTimeOffset.Now.ToUnixTimeMilliseconds();
while (!StopRequested)
{
/*
List<CheckJob> checkJobs = new List<CheckJob>();
Logging.Log(LogLevel.INFO, "SkyChecker.scheduler(): scheduler save CheckStates");
lock (saveQueue)
{
foreach (SkyCheckState checkState in saveQueue)
{
SkyScanner.Instance.Entities.SkyCheckStates.Upsert(checkState);
}
saveQueue.Clear();
}
Logging.Log(LogLevel.INFO, "SkyChecker.scheduler(): scheduler starts");
foreach (Node node in SkyScanner.Instance.Entities.NodeCollection)
{
CheckJob checkJob = new CheckJob(node);
checkJobs.Add(checkJob);
}
Logging.Log(LogLevel.INFO, "SkyChecker.scheduler(): prepared {0} checks", checkJobs.Count);
Logging.Log(LogLevel.INFO, "SkyChecker.scheduler(): scheduled {0} checks", checkPool.Enqueue(checkJobs));
*/
while (true)
{
while ((nextMinute - DateTimeOffset.Now.ToUnixTimeMilliseconds()) < 0)
nextMinute += 60000;
try
{
Thread.Sleep((int)(nextMinute - DateTimeOffset.Now.ToUnixTimeMilliseconds()));
} catch (ThreadInterruptedException)
{
Logging.Log(LogLevel.INFO, "CheckService: scheduler was interrupted");
if (StopRequested)
break;
}
}
}
}
}
}