From b4e96a873dcf48fdf14d2555ea95bc78fffb7da7 Mon Sep 17 00:00:00 2001 From: rootdarkarchon Date: Wed, 22 Feb 2023 10:28:03 +0100 Subject: [PATCH] fix gpose and disposal of charas when losing sight --- MareSynchronos/Managers/CachedPlayer.cs | 2 +- MareSynchronos/Managers/PairManager.cs | 8 ++++---- MareSynchronos/Mediator/MareMediator.cs | 2 +- MareSynchronos/Models/Pair.cs | 12 ++---------- MareSynchronos/WebAPI/ApiController.cs | 1 - 5 files changed, 8 insertions(+), 17 deletions(-) diff --git a/MareSynchronos/Managers/CachedPlayer.cs b/MareSynchronos/Managers/CachedPlayer.cs index 6602fea..9a4165d 100644 --- a/MareSynchronos/Managers/CachedPlayer.cs +++ b/MareSynchronos/Managers/CachedPlayer.cs @@ -206,7 +206,7 @@ public class CachedPlayer : MediatorSubscriberBase, IDisposable { if (PlayerName == null || _currentOtherChara == null || !string.Equals(PlayerName, _currentOtherChara.Name, StringComparison.Ordinal) - || _currentOtherChara.Address == IntPtr.Zero) + || _currentOtherChara.CurrentAddress == IntPtr.Zero) { return false; } diff --git a/MareSynchronos/Managers/PairManager.cs b/MareSynchronos/Managers/PairManager.cs index 2f1cb08..4069a9f 100644 --- a/MareSynchronos/Managers/PairManager.cs +++ b/MareSynchronos/Managers/PairManager.cs @@ -146,7 +146,7 @@ public class PairManager : MediatorSubscriberBase, IDisposable if (recreate) item.Value.RecreateCachedPlayer(); else - item.Value.Dispose(); + item.Value.MarkOffline(); } RecreateLazy(); } @@ -214,7 +214,7 @@ public class PairManager : MediatorSubscriberBase, IDisposable if (!pair.HasAnyConnection()) { - pair.Dispose(); + pair.MarkOffline(); _allClientPairs.TryRemove(dto.User, out _); } @@ -229,7 +229,7 @@ public class PairManager : MediatorSubscriberBase, IDisposable pair.UserPair = null; if (!pair.HasAnyConnection()) { - pair.Dispose(); + pair.MarkOffline(); _allClientPairs.TryRemove(dto.User, out _); } else @@ -275,7 +275,7 @@ public class PairManager : MediatorSubscriberBase, IDisposable { if (!pair.CachedPlayerExists) { - pair.Dispose(); + pair.RecreateCachedPlayer(); } } } diff --git a/MareSynchronos/Mediator/MareMediator.cs b/MareSynchronos/Mediator/MareMediator.cs index c33f828..41c54fb 100644 --- a/MareSynchronos/Mediator/MareMediator.cs +++ b/MareSynchronos/Mediator/MareMediator.cs @@ -72,7 +72,7 @@ public class MareMediator : IDisposable lock (_addRemoveLock) { var removed = _subscriberDict[message.GetType()].RemoveWhere(s => s == subscriber); - _logger.LogCritical(ex, "Error executing {type} for subscriber {subscriber}, removed from Mediator: {removeCount}", message.GetType(), subscriber, removed); + _logger.LogCritical(ex, "Error executing {type} for subscriber {subscriber}, removed from Mediator: {removeCount}", message.GetType().Name, subscriber.Subscriber.GetType().Name, removed); } } } diff --git a/MareSynchronos/Models/Pair.cs b/MareSynchronos/Models/Pair.cs index 3072fa2..7b2c21b 100644 --- a/MareSynchronos/Models/Pair.cs +++ b/MareSynchronos/Models/Pair.cs @@ -13,7 +13,7 @@ using Microsoft.Extensions.Logging; namespace MareSynchronos.Models; -public class Pair : IDisposable +public class Pair { private readonly ILogger _logger; private readonly CachedPlayerFactory _cachedPlayerFactory; @@ -140,7 +140,7 @@ public class Pair : IDisposable public void RecreateCachedPlayer(OnlineUserIdentDto? dto = null, ApiController? controller = null) { - if (dto == null && _onlineUserIdentDto == null || _apiController == null && controller == null) return; + if ((dto == null && _onlineUserIdentDto == null) || (_apiController == null && controller == null)) return; if (dto != null || controller != null) { _onlineUserIdentDto = dto; @@ -158,12 +158,4 @@ public class Pair : IDisposable CachedPlayer?.Dispose(); CachedPlayer = null; } - - public void Dispose() - { - _onlineUserIdentDto = null; - LastReceivedCharacterData = null; - CachedPlayer?.Dispose(); - CachedPlayer = null; - } } diff --git a/MareSynchronos/WebAPI/ApiController.cs b/MareSynchronos/WebAPI/ApiController.cs index 19e1fd0..910adf2 100644 --- a/MareSynchronos/WebAPI/ApiController.cs +++ b/MareSynchronos/WebAPI/ApiController.cs @@ -360,7 +360,6 @@ public partial class ApiController : MediatorSubscriberBase, IDisposable, IMareH CurrentUploads.Clear(); CurrentDownloads.Clear(); Mediator.Publish(new DisconnectedMessage()); - _pairManager.ClearPairs(); _mareHub = null; } }