From 680c5f4712edddffaf8454bad14dfd288a82e307 Mon Sep 17 00:00:00 2001 From: rootdarkarchon Date: Sat, 4 Feb 2023 00:46:48 +0100 Subject: [PATCH] minor fixes --- MareSynchronos/Managers/PairManager.cs | 4 ++-- MareSynchronos/Utils/DalamudUtil.cs | 27 ++++++++++++++++---------- MareSynchronos/WebAPI/ApiController.cs | 2 +- 3 files changed, 20 insertions(+), 13 deletions(-) diff --git a/MareSynchronos/Managers/PairManager.cs b/MareSynchronos/Managers/PairManager.cs index 3f996c3..b3b0012 100644 --- a/MareSynchronos/Managers/PairManager.cs +++ b/MareSynchronos/Managers/PairManager.cs @@ -165,13 +165,13 @@ public class PairManager : MediatorSubscriberBase, IDisposable } } - public void MarkPairOnline(OnlineUserIdentDto dto, ApiController controller) + public void MarkPairOnline(OnlineUserIdentDto dto, ApiController controller, bool sendNotif = true) { if (!_allClientPairs.ContainsKey(dto.User)) throw new InvalidOperationException("No user found for " + dto); var pair = _allClientPairs[dto.User]; if (pair.CachedPlayer != null) return; - if (_configurationService.Current.ShowOnlineNotifications + if (sendNotif && _configurationService.Current.ShowOnlineNotifications && ((_configurationService.Current.ShowOnlineNotificationsOnlyForIndividualPairs && pair.UserPair != null) || !_configurationService.Current.ShowOnlineNotificationsOnlyForIndividualPairs) && (_configurationService.Current.ShowOnlineNotificationsOnlyForNamedPairs && !string.IsNullOrEmpty(pair.GetNote()) diff --git a/MareSynchronos/Utils/DalamudUtil.cs b/MareSynchronos/Utils/DalamudUtil.cs index fd88602..30dc83c 100644 --- a/MareSynchronos/Utils/DalamudUtil.cs +++ b/MareSynchronos/Utils/DalamudUtil.cs @@ -231,17 +231,24 @@ public class DalamudUtil : IDisposable var obj = (GameObject*)characterAddress; const int tick = 250; int curWaitTime = 0; - // ReSharper disable once LoopVariableIsNeverChangedInsideLoop - while ((((obj->GetDrawObject() == null - || ((CharacterBase*)obj->GetDrawObject())->HasModelFilesInSlotLoaded != 0 - || ((CharacterBase*)obj->GetDrawObject())->HasModelFilesInSlotLoaded != 0)) - || ((obj->RenderFlags & 0b100000000000) == 0b100000000000)) - && (!ct?.IsCancellationRequested ?? true) - && curWaitTime < timeOut) // 0b100000000000 is "still rendering" or something + try { - Logger.Verbose($"Waiting for {name} to finish drawing"); - curWaitTime += tick; - Thread.Sleep(tick); + // ReSharper disable once LoopVariableIsNeverChangedInsideLoop + while ((!ct?.IsCancellationRequested ?? true) + && curWaitTime < timeOut + && (((obj->GetDrawObject() == null + || ((CharacterBase*)obj->GetDrawObject())->HasModelFilesInSlotLoaded != 0 + || ((CharacterBase*)obj->GetDrawObject())->HasModelFilesInSlotLoaded != 0)) + || ((obj->RenderFlags & 0b100000000000) == 0b100000000000))) // 0b100000000000 is "still rendering" or something + { + Logger.Verbose($"Waiting for {name} to finish drawing"); + curWaitTime += tick; + Thread.Sleep(tick); + } + } + catch (AccessViolationException ex) + { + Logger.Warn("Error accessing " + characterAddress.ToString("X") + ", object does not exist anymore?", ex); } } diff --git a/MareSynchronos/WebAPI/ApiController.cs b/MareSynchronos/WebAPI/ApiController.cs index 6a663b1..f2a270a 100644 --- a/MareSynchronos/WebAPI/ApiController.cs +++ b/MareSynchronos/WebAPI/ApiController.cs @@ -294,7 +294,7 @@ public partial class ApiController : MediatorSubscriberBase, IDisposable, IMareH foreach (var entry in await UserGetOnlinePairs().ConfigureAwait(false)) { - _pairManager.MarkPairOnline(entry, this); + _pairManager.MarkPairOnline(entry, this, false); } _healthCheckTokenSource?.Cancel();