From 8be0811b4a67c43cb640967b2f3826cb9da862b2 Mon Sep 17 00:00:00 2001 From: azyges Date: Sat, 17 Jan 2026 03:06:46 +0900 Subject: [PATCH] fix pair offline state --- LightlessSync/PlayerData/Pairs/PairCoordinator.Users.cs | 2 +- LightlessSync/PlayerData/Pairs/PairHandlerAdapter.cs | 1 + LightlessSync/PlayerData/Pairs/PairHandlerRegistry.cs | 4 ++++ LightlessSync/PlayerData/Pairs/PairManager.cs | 6 ++++-- LightlessSync/PlayerData/Pairs/PairModels.cs | 1 + 5 files changed, 11 insertions(+), 3 deletions(-) diff --git a/LightlessSync/PlayerData/Pairs/PairCoordinator.Users.cs b/LightlessSync/PlayerData/Pairs/PairCoordinator.Users.cs index 713333e..6a5cb45 100644 --- a/LightlessSync/PlayerData/Pairs/PairCoordinator.Users.cs +++ b/LightlessSync/PlayerData/Pairs/PairCoordinator.Users.cs @@ -137,7 +137,7 @@ public sealed partial class PairCoordinator _pendingCharacterData.TryRemove(user.UID, out _); if (registrationResult.Value.CharacterIdent is not null) { - _ = _handlerRegistry.DeregisterOfflinePair(registrationResult.Value); + _ = _handlerRegistry.DeregisterOfflinePair(registrationResult.Value, forceDisposal: true); } _mediator.Publish(new ClearProfileUserDataMessage(user)); diff --git a/LightlessSync/PlayerData/Pairs/PairHandlerAdapter.cs b/LightlessSync/PlayerData/Pairs/PairHandlerAdapter.cs index 9a3683f..7b3708f 100644 --- a/LightlessSync/PlayerData/Pairs/PairHandlerAdapter.cs +++ b/LightlessSync/PlayerData/Pairs/PairHandlerAdapter.cs @@ -1363,6 +1363,7 @@ internal sealed class PairHandlerAdapter : DisposableMediatorSubscriberBase, IPa { PlayerName = null; _cachedData = null; + LastReceivedCharacterData = null; _performanceMetricsCache.Clear(Ident); Logger.LogDebug("Disposing {name} complete", name); } diff --git a/LightlessSync/PlayerData/Pairs/PairHandlerRegistry.cs b/LightlessSync/PlayerData/Pairs/PairHandlerRegistry.cs index 881c35c..9ffcd1f 100644 --- a/LightlessSync/PlayerData/Pairs/PairHandlerRegistry.cs +++ b/LightlessSync/PlayerData/Pairs/PairHandlerRegistry.cs @@ -136,6 +136,7 @@ public sealed class PairHandlerRegistry : IDisposable if (TryFinalizeHandlerRemoval(handler)) { handler.Dispose(); + _pairStateCache.Clear(registration.CharacterIdent); } } else if (shouldScheduleRemoval && handler is not null) @@ -356,6 +357,7 @@ public sealed class PairHandlerRegistry : IDisposable finally { _pairPerformanceMetricsCache.Clear(handler.Ident); + _pairStateCache.Clear(handler.Ident); } } } @@ -377,6 +379,7 @@ public sealed class PairHandlerRegistry : IDisposable { handler.Dispose(); _pairPerformanceMetricsCache.Clear(handler.Ident); + _pairStateCache.Clear(handler.Ident); } } @@ -401,6 +404,7 @@ public sealed class PairHandlerRegistry : IDisposable if (TryFinalizeHandlerRemoval(handler)) { handler.Dispose(); + _pairStateCache.Clear(handler.Ident); } } diff --git a/LightlessSync/PlayerData/Pairs/PairManager.cs b/LightlessSync/PlayerData/Pairs/PairManager.cs index eb70a54..0a18a9d 100644 --- a/LightlessSync/PlayerData/Pairs/PairManager.cs +++ b/LightlessSync/PlayerData/Pairs/PairManager.cs @@ -160,8 +160,9 @@ public sealed class PairManager return PairOperationResult.Fail($"Pair {user.UID} not found."); } + var ident = connection.Ident; connection.SetOffline(); - return PairOperationResult.Ok(new PairRegistration(new PairUniqueIdentifier(user.UID), connection.Ident)); + return PairOperationResult.Ok(new PairRegistration(new PairUniqueIdentifier(user.UID), ident)); } } @@ -530,6 +531,7 @@ public sealed class PairManager return null; } + var ident = connection.Ident; if (connection.IsOnline) { connection.SetOffline(); @@ -542,7 +544,7 @@ public sealed class PairManager shell.Users.Remove(userId); } - return new PairRegistration(new PairUniqueIdentifier(userId), connection.Ident); + return new PairRegistration(new PairUniqueIdentifier(userId), ident); } public static PairConnection CreateFromFullData(UserFullPairDto dto) diff --git a/LightlessSync/PlayerData/Pairs/PairModels.cs b/LightlessSync/PlayerData/Pairs/PairModels.cs index 9f34ab2..3b37ce2 100644 --- a/LightlessSync/PlayerData/Pairs/PairModels.cs +++ b/LightlessSync/PlayerData/Pairs/PairModels.cs @@ -76,6 +76,7 @@ public sealed class PairConnection public void SetOffline() { IsOnline = false; + Ident = null; } public void UpdatePermissions(UserPermissions own, UserPermissions other)