From 28b89f66f8775b1ac88f0216ea3b620ae491f5ad Mon Sep 17 00:00:00 2001 From: rootdarkarchon Date: Thu, 20 Apr 2023 12:26:14 +0200 Subject: [PATCH] delay honorific changes to avoid serverspam --- .../PlayerData/Services/CacheCreationService.cs | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/MareSynchronos/PlayerData/Services/CacheCreationService.cs b/MareSynchronos/PlayerData/Services/CacheCreationService.cs index c8552c0..286243b 100644 --- a/MareSynchronos/PlayerData/Services/CacheCreationService.cs +++ b/MareSynchronos/PlayerData/Services/CacheCreationService.cs @@ -17,6 +17,7 @@ public sealed class CacheCreationService : DisposableMediatorSubscriberBase private readonly CharacterData _playerData = new(); private readonly Dictionary _playerRelatedObjects = new(); private Task? _cacheCreationTask; + private CancellationTokenSource _honorificCts = new(); private CancellationTokenSource _palettePlusCts = new(); public CacheCreationService(ILogger logger, MareMediator mediator, Func, bool, GameObjectHandler> gameObjectHandlerFactory, @@ -64,7 +65,7 @@ public sealed class CacheCreationService : DisposableMediatorSubscriberBase Mediator.Subscribe(this, async (_) => { Logger.LogDebug("Received Honorific change, updating player"); - await AddPlayerCacheToCreate().ConfigureAwait(false); + HonorificChanged(); }); Mediator.Subscribe(this, async (msg) => { @@ -97,6 +98,20 @@ public sealed class CacheCreationService : DisposableMediatorSubscriberBase _cacheCreateLock.Release(); } + private void HonorificChanged() + { + _honorificCts?.Cancel(); + _honorificCts?.Dispose(); + _honorificCts = new(); + var token = _honorificCts.Token; + + Task.Run(async () => + { + await Task.Delay(TimeSpan.FromSeconds(3), token).ConfigureAwait(false); + await AddPlayerCacheToCreate().ConfigureAwait(false); + }, token); + } + private void PalettePlusChanged() { _palettePlusCts?.Cancel();