/* Service Startup */ protected override void OnStart(string[] args) { /* Start Timer */ RequestTimer = new Timer(); UpdateTimer = new Timer(); MailTimer = new Timer(); /* Setup Credentials */ MailCredentials = new System.Net.NetworkCredential("*****@*****.**", "84yvSHZpJrw7aGH"); sClient = new Web(MailCredentials); /* Run once every hour */ UpdateTimer.Interval = 1000 * 60 * 60; UpdateTimer.Elapsed += UpdateTimer_Elapsed; /* Run once every minute */ RequestTimer.Interval = 1000 * 60; RequestTimer.Elapsed += RequestTimer_Elapsed; /* Run mailing once every minute */ MailTimer.Interval = 1000 * 60; MailTimer.Elapsed += MailTimer_Elapsed; /* Start */ UpdateTimer.Start(); RequestTimer.Start(); //MailTimer.Start(); /* Don't start it here */ mManager = null; /* Create Path */ if (!Directory.Exists(Environment.GetFolderPath( Environment.SpecialFolder.CommonDocuments) + "\\EIA\\Logs\\")) Directory.CreateDirectory(Environment.GetFolderPath( Environment.SpecialFolder.CommonDocuments) + "\\EIA\\Logs\\"); /* Log it */ Log("Model Parser Started.."); }
/* Handle Requests */ async void RequestTimer_Elapsed(object sender, ElapsedEventArgs e) { /* Read transaction requests */ EIA.Repository.CModelRequest NextRequest = null; try { /* Make sure it is started */ if (mManager == null) { mManager = new Manager(); await mManager.Update(); } /* Iterate */ using (EIA.Repository.RequestRepository rRepo = new Repository.RequestRepository()) { /* Get next request */ NextRequest = await rRepo.GetNext(); /* Keep looping */ while (NextRequest != null) { /* Used to catch errors */ Boolean ParseError = false; /* Set in progress */ await rRepo.SetRequestStatus(NextRequest.Guid, Repository.RequestStatus.Processing); try { /* Handle request */ await mManager.HandleRequest(NextRequest); } catch (Exception Ex) { Log("Failed to parse: " + Ex.ToString()); ParseError = true; } /* Done? */ if (ParseError) await rRepo.SetRequestStatus(NextRequest.Guid, Repository.RequestStatus.Cancelled); else await rRepo.SetRequestStatus(NextRequest.Guid, Repository.RequestStatus.Finished); /* Get next request */ NextRequest = await rRepo.GetNext(); } } /* Set null */ NextRequest = null; } catch (Exception Ex) { Log(Ex.ToString()); } }