diff --git a/Libraries/SPTarkov.Server.Core/Callbacks/DialogueCallbacks.cs b/Libraries/SPTarkov.Server.Core/Callbacks/DialogueCallbacks.cs index f1269daa..bc30e684 100644 --- a/Libraries/SPTarkov.Server.Core/Callbacks/DialogueCallbacks.cs +++ b/Libraries/SPTarkov.Server.Core/Callbacks/DialogueCallbacks.cs @@ -17,10 +17,10 @@ public class DialogueCallbacks( ) : IOnUpdate { - public Task OnUpdate(long timeSinceLastRun) + public Task OnUpdate(long timeSinceLastRun) { _dialogueController.Update(); - return Task.CompletedTask; + return Task.FromResult(true); } /// diff --git a/Libraries/SPTarkov.Server.Core/Callbacks/HideoutCallbacks.cs b/Libraries/SPTarkov.Server.Core/Callbacks/HideoutCallbacks.cs index e34d22ca..6beb0bb4 100644 --- a/Libraries/SPTarkov.Server.Core/Callbacks/HideoutCallbacks.cs +++ b/Libraries/SPTarkov.Server.Core/Callbacks/HideoutCallbacks.cs @@ -20,12 +20,12 @@ public class HideoutCallbacks( private readonly HideoutConfig _hideoutConfig = _configServer.GetConfig(); private long _lastRunOnUpdateTimestamp = long.MaxValue; - public Task OnUpdate(long secondsSinceLastRun) + public Task OnUpdate(long secondsSinceLastRun) { if (_timeUtil.GetTimeStamp() <= _lastRunOnUpdateTimestamp + _hideoutConfig.RunIntervalSeconds) { // Not enough time has passed since last run, exit early - return Task.CompletedTask; + return Task.FromResult(false); } _hideoutController.Update(); @@ -33,7 +33,7 @@ public class HideoutCallbacks( // Store last completion time for later use _lastRunOnUpdateTimestamp = _timeUtil.GetTimeStamp(); - return Task.CompletedTask; + return Task.FromResult(true); } /// diff --git a/Libraries/SPTarkov.Server.Core/Callbacks/InsuranceCallbacks.cs b/Libraries/SPTarkov.Server.Core/Callbacks/InsuranceCallbacks.cs index b2e1fcb1..aaa094ff 100644 --- a/Libraries/SPTarkov.Server.Core/Callbacks/InsuranceCallbacks.cs +++ b/Libraries/SPTarkov.Server.Core/Callbacks/InsuranceCallbacks.cs @@ -16,20 +16,27 @@ public class InsuranceCallbacks( InsuranceController _insuranceController, InsuranceService _insuranceService, HttpResponseUtil _httpResponseUtil, - ConfigServer _configServer + ConfigServer _configServer, + TimeUtil _timeUtil ) : IOnUpdate { private readonly InsuranceConfig _insuranceConfig = _configServer.GetConfig(); + private long _lastRunOnUpdateTimestamp = long.MaxValue; - public Task OnUpdate(long timeSinceLastRun) + public Task OnUpdate(long secondsSinceLastRun) { - if (timeSinceLastRun > Math.Max(_insuranceConfig.RunIntervalSeconds, 1)) + if (_timeUtil.GetTimeStamp() <= _lastRunOnUpdateTimestamp + _insuranceConfig.RunIntervalSeconds) { - _insuranceController.ProcessReturn(); + return Task.FromResult(false); } - return Task.CompletedTask; + _insuranceController.ProcessReturn(); + + // Store last completion time for later use + _lastRunOnUpdateTimestamp = _timeUtil.GetTimeStamp(); + + return Task.FromResult(true); } /// diff --git a/Libraries/SPTarkov.Server.Core/Callbacks/RagfairCallbacks.cs b/Libraries/SPTarkov.Server.Core/Callbacks/RagfairCallbacks.cs index a00a6a8a..e711ccb9 100644 --- a/Libraries/SPTarkov.Server.Core/Callbacks/RagfairCallbacks.cs +++ b/Libraries/SPTarkov.Server.Core/Callbacks/RagfairCallbacks.cs @@ -32,12 +32,12 @@ public class RagfairCallbacks( return Task.CompletedTask; } - public Task OnUpdate(long secondsSinceLastRun) + public Task OnUpdate(long secondsSinceLastRun) { if (_timeUtil.GetTimeStamp() <= _lastRunOnUpdateTimestamp + _ragfairConfig.RunIntervalSeconds) { // Not enough time has passed since last run, exit early - return Task.CompletedTask; + return Task.FromResult(false); } // There is a flag inside this class that only makes it run once. @@ -52,7 +52,7 @@ public class RagfairCallbacks( // Store last completion time for later use _lastRunOnUpdateTimestamp = _timeUtil.GetTimeStamp(); - return Task.CompletedTask; + return Task.FromResult(true); } /// diff --git a/Libraries/SPTarkov.Server.Core/Callbacks/SaveCallbacks.cs b/Libraries/SPTarkov.Server.Core/Callbacks/SaveCallbacks.cs index 627a984b..cec88406 100644 --- a/Libraries/SPTarkov.Server.Core/Callbacks/SaveCallbacks.cs +++ b/Libraries/SPTarkov.Server.Core/Callbacks/SaveCallbacks.cs @@ -3,6 +3,7 @@ using SPTarkov.Server.Core.DI; using SPTarkov.Server.Core.Models.Spt.Config; using SPTarkov.Server.Core.Servers; using SPTarkov.Server.Core.Services; +using SPTarkov.Server.Core.Utils; namespace SPTarkov.Server.Core.Callbacks; @@ -10,11 +11,13 @@ namespace SPTarkov.Server.Core.Callbacks; public class SaveCallbacks( SaveServer _saveServer, ConfigServer _configServer, - BackupService _backupService + BackupService _backupService, + TimeUtil _timeUtil ) : IOnLoad, IOnUpdate { private readonly CoreConfig _coreConfig = _configServer.GetConfig(); + private long _lastRunOnUpdateTimestamp = long.MaxValue; public async Task OnLoad() { @@ -22,13 +25,19 @@ public class SaveCallbacks( _saveServer.Load(); } - public Task OnUpdate(long timeSinceLastRun) + public Task OnUpdate(long secondsSinceLastRun) { - if (timeSinceLastRun > _coreConfig.ProfileSaveIntervalInSeconds) + if (_timeUtil.GetTimeStamp() <= _lastRunOnUpdateTimestamp + _coreConfig.ProfileSaveIntervalInSeconds) { - _saveServer.Save(); + // Not enough time has passed since last run, exit early + return Task.FromResult(false); } - return Task.CompletedTask; + _saveServer.Save(); + + // Store last completion time for later use + _lastRunOnUpdateTimestamp = _timeUtil.GetTimeStamp(); + + return Task.FromResult(false); } } diff --git a/Libraries/SPTarkov.Server.Core/Callbacks/TraderCallbacks.cs b/Libraries/SPTarkov.Server.Core/Callbacks/TraderCallbacks.cs index bda3367b..1324ee20 100644 --- a/Libraries/SPTarkov.Server.Core/Callbacks/TraderCallbacks.cs +++ b/Libraries/SPTarkov.Server.Core/Callbacks/TraderCallbacks.cs @@ -23,19 +23,16 @@ public class TraderCallbacks( return Task.CompletedTask; } - public Task OnUpdate(long _) + public Task OnUpdate(long _) { _traderController.Update(); - return Task.CompletedTask; + + return Task.FromResult(true); } /// /// Handle client/trading/api/traderSettings /// - /// - /// - /// Session/player id - /// public ValueTask GetTraderSettings(string url, EmptyRequestData _, string sessionID) { return new ValueTask(_httpResponseUtil.GetBody(_traderController.GetAllTraders(sessionID))); @@ -44,10 +41,6 @@ public class TraderCallbacks( /// /// Handle client/trading/api/getTrader /// - /// - /// - /// Session/player id - /// public ValueTask GetTrader(string url, EmptyRequestData _, string sessionID) { var traderID = url.Replace("/client/trading/api/getTrader/", ""); @@ -57,9 +50,6 @@ public class TraderCallbacks( /// /// Handle client/trading/api/getTraderAssort /// - /// - /// - /// Session/player id /// public ValueTask GetAssort(string url, EmptyRequestData _, string sessionID) { diff --git a/Libraries/SPTarkov.Server.Core/DI/IOnUpdate.cs b/Libraries/SPTarkov.Server.Core/DI/IOnUpdate.cs index a0daa856..22f40358 100644 --- a/Libraries/SPTarkov.Server.Core/DI/IOnUpdate.cs +++ b/Libraries/SPTarkov.Server.Core/DI/IOnUpdate.cs @@ -2,5 +2,5 @@ namespace SPTarkov.Server.Core.DI; public interface IOnUpdate { - Task OnUpdate(long secondsSinceLastRun); + Task OnUpdate(long secondsSinceLastRun); }