/// <summary> /// Initializes a new instance of the RepoConstraintFactory class /// </summary> /// <param name="contextProvider">the contextprovider object that enables this Factory to access the db using EntityFramework</param> /// <param name="factory">the pluginFactory that will provide custom plugins that are required in order to execute some constraints</param> public RepoConstraintFactory(IContextBuffer contextProvider, PluginFactory factory) : base(factory) { this.contextProvider = contextProvider; RefreshConstraints(); BackgroundRunner.AddPeriodicTask(RefreshConstraints, 60000); }
/// <summary> /// Completes the satrtup and puts this proxy into an operational state /// </summary> private void StartupComplete() { client.SubscribeEvent(remoteObjectName, "PackageProcessed", new PackageFinishedEventHandler((s, e) => { PackageSender ntask; lock (processingPackages) { var retVal = (from t in processingPackages where t.Package.Id == e.Package.Id select t) .FirstOrDefault(); if (retVal != null) { processingPackages.Remove(retVal); } ntask = retVal; } PackageTrigger trigger; lock (unCommittedPackages) { trigger = (from t in unCommittedPackages where t.Args.Package.Id == e.Package.Id select t).FirstOrDefault(); } if (ntask != null || trigger != null) { if ((e.Tasks.All(Success) && Success(e.Package)) || !e.Tasks.Any(RequireReboot)) { bool reTriggered = trigger != null; if (!reTriggered) { lock (unCommittedPackages) { if (unCommittedPackages.All(t => t.Args.Package.Id != e.Package.Id)) { unCommittedPackages.Add(new PackageTrigger { Args = e, LastTrigger = DateTime.MinValue }); } } } if (reTriggered) { LogEnvironment.LogDebugEvent(string.Format("The calling system did not commit the job {0} yet", e.Package.Id), LogSeverity.Warning); } } else { lock (processingPackages) { processingPackages.Add(ntask); } RebootService(); } } })); void OpCallback(object o, EventArgs e) { if (client.Operational) { lock (processingPackages) { processingPackages.ForEach(t => t.Sent = false); } } else { timeOfCommunicationLoss = DateTime.Now; } ((IBidirectionalClient)o).OperationalChanged -= OpCallback; }; client.OperationalChanged += OpCallback; InitializeService(); BackgroundRunner.AddPeriodicTask(ReTriggerPendingTasks, 20000); }
protected override void Ready() { BackgroundRunner.AddPeriodicTask(CheckSchedules, 500); LogEnvironment.LogDebugEvent("PeriodScheduler is now online", LogSeverity.Report); base.Ready(); }
/// <summary> /// Starts this Scheduler /// </summary> protected override void Ready() { BackgroundRunner.AddPeriodicTask(CheckSchedules, 2000); base.Ready(); }