From a7a3ae66a970edd05fb3ac0fc46d118cfbd9446d Mon Sep 17 00:00:00 2001 From: Stanley Dimant Date: Wed, 31 Aug 2022 16:27:28 +0200 Subject: [PATCH] connectivity fixes --- MareSynchronos/Managers/CachedPlayer.cs | 6 +++-- MareSynchronos/MareSynchronos.csproj | 2 +- MareSynchronos/Models/PlayerRelatedObject.cs | 10 ++----- .../WebAPI/ApiController.Connectivity.cs | 26 ++++++++----------- 4 files changed, 18 insertions(+), 26 deletions(-) diff --git a/MareSynchronos/Managers/CachedPlayer.cs b/MareSynchronos/Managers/CachedPlayer.cs index 82041f1..5070de0 100644 --- a/MareSynchronos/Managers/CachedPlayer.cs +++ b/MareSynchronos/Managers/CachedPlayer.cs @@ -426,7 +426,9 @@ public class CachedPlayer _penumbraRedrawEventTask = Task.Run(() => { PlayerCharacter = player; - _dalamudUtil.WaitWhileCharacterIsDrawing(PlayerCharacter.Address); + using var cts = new CancellationTokenSource(); + cts.CancelAfter(TimeSpan.FromSeconds(5)); + _dalamudUtil.WaitWhileCharacterIsDrawing(PlayerCharacter.Address, cts.Token); if (RequestedPenumbraRedraw == false) { @@ -445,9 +447,9 @@ public class CachedPlayer private void OnPlayerChanged() { Logger.Debug($"Player {PlayerName} changed, PenumbraRedraw is {RequestedPenumbraRedraw}"); + _currentCharacterEquipment!.HasUnprocessedUpdate = false; if (!RequestedPenumbraRedraw && PlayerCharacter is not null) { - _currentCharacterEquipment!.HasUnprocessedUpdate = false; Logger.Debug($"Saving new Glamourer data"); _lastGlamourerData = _ipcManager.GlamourerGetCharacterCustomization(PlayerCharacter!); } diff --git a/MareSynchronos/MareSynchronos.csproj b/MareSynchronos/MareSynchronos.csproj index f3094c9..01b3da1 100644 --- a/MareSynchronos/MareSynchronos.csproj +++ b/MareSynchronos/MareSynchronos.csproj @@ -3,7 +3,7 @@ - 0.3.8 + 0.3.9 https://github.com/Penumbra-Sync/client diff --git a/MareSynchronos/Models/PlayerRelatedObject.cs b/MareSynchronos/Models/PlayerRelatedObject.cs index 62096f1..39a021d 100644 --- a/MareSynchronos/Models/PlayerRelatedObject.cs +++ b/MareSynchronos/Models/PlayerRelatedObject.cs @@ -60,17 +60,11 @@ namespace MareSynchronos.Models HasUnprocessedUpdate = true; } } - else + else if (Address != IntPtr.Zero || DrawObjectAddress != IntPtr.Zero) { - if (Address != IntPtr.Zero || DrawObjectAddress != IntPtr.Zero) - { - Address = IntPtr.Zero; - DrawObjectAddress = IntPtr.Zero; - HasUnprocessedUpdate = true; - } - Address = IntPtr.Zero; DrawObjectAddress = IntPtr.Zero; + Logger.Verbose(ObjectKind + " Changed: " + _name + ", now: " + Address + ", " + DrawObjectAddress); } } diff --git a/MareSynchronos/WebAPI/ApiController.Connectivity.cs b/MareSynchronos/WebAPI/ApiController.Connectivity.cs index 010fbc5..ca96f60 100644 --- a/MareSynchronos/WebAPI/ApiController.Connectivity.cs +++ b/MareSynchronos/WebAPI/ApiController.Connectivity.cs @@ -137,16 +137,19 @@ namespace MareSynchronos.WebAPI public async Task CreateConnections() { - await StopConnection(_connectionCancellationTokenSource.Token); + Logger.Debug("CreateConnections called"); if (_pluginConfiguration.FullPause) { Logger.Info("Not recreating Connection, paused"); ServerState = ServerState.Disconnected; _connectionDto = null; + await StopConnection(_connectionCancellationTokenSource.Token); return; } + await StopConnection(_connectionCancellationTokenSource.Token); + Logger.Info("Recreating Connection"); _connectionCancellationTokenSource.Cancel(); @@ -198,7 +201,6 @@ namespace MareSynchronos.WebAPI await InitializeData(token); _mareHub.Closed += MareHubOnClosed; - _mareHub.Reconnected += MareHubOnReconnected; _mareHub.Reconnecting += MareHubOnReconnecting; } } @@ -314,24 +316,15 @@ namespace MareSynchronos.WebAPI return Task.CompletedTask; } - private async Task MareHubOnReconnected(string? arg) - { - Logger.Info("Connection restored"); - await Task.Delay(TimeSpan.FromSeconds(new Random().Next(5, 10))); - - _ = Task.Run(CreateConnections); - } - private Task MareHubOnReconnecting(Exception? arg) { - CurrentUploads.Clear(); - CurrentDownloads.Clear(); - _uploadCancellationTokenSource?.Cancel(); ServerState = ServerState.Disconnected; Logger.Warn("Connection closed... Reconnecting"); Logger.Warn(arg?.Message ?? string.Empty); Logger.Warn(arg?.StackTrace ?? string.Empty); Disconnected?.Invoke(); + ServerState = ServerState.Offline; + _ = Task.Run(CreateConnections); return Task.CompletedTask; } @@ -340,11 +333,14 @@ namespace MareSynchronos.WebAPI if (_mareHub is not null) { Logger.Info("Stopping existing connection"); - await _mareHub.StopAsync(token); _mareHub.Closed -= MareHubOnClosed; - _mareHub.Reconnected -= MareHubOnReconnected; _mareHub.Reconnecting += MareHubOnReconnecting; + await _mareHub.StopAsync(token); await _mareHub.DisposeAsync(); + CurrentUploads.Clear(); + CurrentDownloads.Clear(); + _uploadCancellationTokenSource?.Cancel(); + Disconnected?.Invoke(); _mareHub = null; }