From 59ed03a825ff0fdfd98ead7cd8c34dd0370c4ac8 Mon Sep 17 00:00:00 2001 From: azyges Date: Tue, 6 Jan 2026 13:27:24 +0900 Subject: [PATCH] replace with log in/out flags --- LightlessSync/Services/DalamudUtilService.cs | 68 ++++++++++++++------ 1 file changed, 48 insertions(+), 20 deletions(-) diff --git a/LightlessSync/Services/DalamudUtilService.cs b/LightlessSync/Services/DalamudUtilService.cs index 672f1b5..45fb182 100644 --- a/LightlessSync/Services/DalamudUtilService.cs +++ b/LightlessSync/Services/DalamudUtilService.cs @@ -867,9 +867,12 @@ public class DalamudUtilService : IHostedService, IMediatorSubscriber { _logger.LogInformation("Starting DalamudUtilService"); _framework.Update += FrameworkOnUpdate; - if (IsLoggedIn) + _clientState.Login += OnClientLogin; + _clientState.Logout += OnClientLogout; + + if (_clientState.IsLoggedIn) { - _classJobId = _objectTable.LocalPlayer!.ClassJob.RowId; + OnClientLogin(); } _logger.LogInformation("Started DalamudUtilService"); @@ -882,6 +885,8 @@ public class DalamudUtilService : IHostedService, IMediatorSubscriber Mediator.UnsubscribeAll(this); _framework.Update -= FrameworkOnUpdate; + _clientState.Login -= OnClientLogin; + _clientState.Logout -= OnClientLogout; if (_FocusPairIdent.HasValue) { if (_framework.IsInFrameworkUpdateThread) @@ -896,6 +901,45 @@ public class DalamudUtilService : IHostedService, IMediatorSubscriber return Task.CompletedTask; } + private void OnClientLogin() + { + if (IsLoggedIn) + return; + + _ = RunOnFrameworkThread(() => + { + if (IsLoggedIn) + return; + + var localPlayer = _objectTable.LocalPlayer; + IsLoggedIn = true; + _lastZone = _clientState.TerritoryType; + if (localPlayer != null) + { + _lastWorldId = (ushort)localPlayer.CurrentWorld.RowId; + _classJobId = localPlayer.ClassJob.RowId; + } + + _cid = RebuildCID(); + Mediator.Publish(new DalamudLoginMessage()); + }); + } + + private void OnClientLogout(int type, int code) + { + if (!IsLoggedIn) + return; + _ = RunOnFrameworkThread(() => + { + if (!IsLoggedIn) + return; + + IsLoggedIn = false; + _lastWorldId = 0; + Mediator.Publish(new DalamudLogoutMessage()); + }); + } + public async Task WaitWhileCharacterIsDrawing(ILogger logger, GameObjectHandler handler, Guid redrawId, int timeOut = 5000, CancellationToken? ct = null) { if (!_clientState.IsLoggedIn) return; @@ -1040,6 +1084,7 @@ public class DalamudUtilService : IHostedService, IMediatorSubscriber } bool isNormalFrameworkUpdate = DateTime.UtcNow < _delayedFrameworkUpdateCheck.AddSeconds(1); + var clientLoggedIn = _clientState.IsLoggedIn; _performanceCollector.LogPerformance(this, $"FrameworkOnUpdateInternal+{(isNormalFrameworkUpdate ? "Regular" : "Delayed")}", () => { @@ -1047,23 +1092,6 @@ public class DalamudUtilService : IHostedService, IMediatorSubscriber if (!isNormalFrameworkUpdate) { - if (localPlayer != null && !IsLoggedIn) - { - _logger.LogDebug("Logged in"); - IsLoggedIn = true; - _lastZone = _clientState.TerritoryType; - _lastWorldId = (ushort)localPlayer.CurrentWorld.RowId; - _cid = RebuildCID(); - Mediator.Publish(new DalamudLoginMessage()); - } - else if (localPlayer == null && IsLoggedIn) - { - _logger.LogDebug("Logged out"); - IsLoggedIn = false; - _lastWorldId = 0; - Mediator.Publish(new DalamudLogoutMessage()); - } - if (_gameConfig != null && _gameConfig.TryGet(Dalamud.Game.Config.SystemConfigOption.LodType_DX11, out bool lodEnabled)) { @@ -1078,7 +1106,7 @@ public class DalamudUtilService : IHostedService, IMediatorSubscriber _delayedFrameworkUpdateCheck = DateTime.UtcNow; } - if (!_clientState.IsLoggedIn || localPlayer == null) + if (!clientLoggedIn) { return; }