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(); } public override void ServiceMain(IApplicationInterface applicationInterface) { long nextMinute = DateTimeOffset.Now.ToUnixTimeMilliseconds(); while (!StopRequested) { /* List checkJobs = new List(); 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; } } } } } }