diff --git a/Pilz.Net/Api/ApiServer.cs b/Pilz.Net/Api/ApiServer.cs index 5a8f006..2fcfe44 100644 --- a/Pilz.Net/Api/ApiServer.cs +++ b/Pilz.Net/Api/ApiServer.cs @@ -66,6 +66,18 @@ public class ApiServer : IApiServer { ApiUrl = apiUrl; this.httpListener = httpListener ?? CreateDefaultHttpListener(); + Jobs.BeforeExecute += Jobs_BeforeExecute; + Jobs.AfterExecute += Jobs_AfterExecute; + } + + private void Jobs_BeforeExecute(object? sender, EventArgs e) + { + ResetManager(); + } + + private void Jobs_AfterExecute(object? sender, EventArgs e) + { + ResetManager(); } private IDataManager GetManager() diff --git a/Pilz.Net/Pilz.Net.csproj b/Pilz.Net/Pilz.Net.csproj index 55c7c40..8beab34 100644 --- a/Pilz.Net/Pilz.Net.csproj +++ b/Pilz.Net/Pilz.Net.csproj @@ -8,7 +8,7 @@ - 2.10.0 + 2.10.1 diff --git a/Pilz/Jobs/JobCenter.cs b/Pilz/Jobs/JobCenter.cs index d766dc5..ae1e77e 100644 --- a/Pilz/Jobs/JobCenter.cs +++ b/Pilz/Jobs/JobCenter.cs @@ -2,6 +2,9 @@ public class JobCenter { + public event EventHandler BeforeExecute; + public event EventHandler AfterExecute; + private readonly HashSet jobs = []; private readonly System.Timers.Timer timerRepeat = new() { @@ -21,12 +24,19 @@ public class JobCenter private void TimerRepeat_Elapsed(object sender, System.Timers.ElapsedEventArgs e) { var now = DateTime.Now; - var jobs = this.jobs.Where(n => n.LastExecution + n.Interval > now); - - foreach (var job in jobs) + var jobs = this.jobs.Where(n => n.LastExecution + n.Interval < now); + + if (jobs.Any()) { - job.LastExecution = now; - job.Execute(new(this)); + BeforeExecute?.Invoke(this, EventArgs.Empty); + + foreach (var job in jobs) + { + job.LastExecution = now; + job.Execute(new(this)); + } + + AfterExecute?.Invoke(this, EventArgs.Empty); } if (Enabled) diff --git a/Pilz/Pilz.csproj b/Pilz/Pilz.csproj index c808db8..00c9d20 100644 --- a/Pilz/Pilz.csproj +++ b/Pilz/Pilz.csproj @@ -5,7 +5,7 @@ latest enable annotations - 2.6.1 + 2.6.2