From 1aef3b1d2ee0dce2973427e4517aa5e1465a8428 Mon Sep 17 00:00:00 2001 From: rootdarkarchon Date: Mon, 27 Feb 2023 02:01:20 +0100 Subject: [PATCH] async await heels/c+/p+ stuff and await it before continuing with application of data --- MareSynchronos/Managers/CachedPlayer.cs | 13 ++++----- MareSynchronos/Managers/IpcManager.cs | 36 ++++++++++++------------- MareSynchronos/Utils/DalamudUtil.cs | 5 ++++ 3 files changed, 30 insertions(+), 24 deletions(-) diff --git a/MareSynchronos/Managers/CachedPlayer.cs b/MareSynchronos/Managers/CachedPlayer.cs index 9a4165d..2303ef2 100644 --- a/MareSynchronos/Managers/CachedPlayer.cs +++ b/MareSynchronos/Managers/CachedPlayer.cs @@ -317,13 +317,13 @@ public class CachedPlayer : MediatorSubscriberBase, IDisposable switch (change) { case PlayerChanges.Palette: - _ipcManager.PalettePlusSetPalette(handler.Address, charaData.PalettePlusData); + await _ipcManager.PalettePlusSetPalette(handler.Address, charaData.PalettePlusData).ConfigureAwait(false); break; case PlayerChanges.Customize: - _ipcManager.CustomizePlusSetBodyScale(handler.Address, charaData.CustomizePlusData); + await _ipcManager.CustomizePlusSetBodyScale(handler.Address, charaData.CustomizePlusData).ConfigureAwait(false); break; case PlayerChanges.Heels: - _ipcManager.HeelsSetOffsetForPlayer(handler.Address, charaData.HeelsOffset); + await _ipcManager.HeelsSetOffsetForPlayer(handler.Address, charaData.HeelsOffset).ConfigureAwait(false); break; case PlayerChanges.Mods: if (charaData.GlamourerData.TryGetValue(changes.Key, out var glamourerData)) @@ -470,10 +470,11 @@ public class CachedPlayer : MediatorSubscriberBase, IDisposable _logger.LogDebug("[{applicationId}] Restoring Equipment for {alias}/{name}: {data}", applicationId, OnlineUser.User.AliasOrUID, name, _lastGlamourerData); await _ipcManager.GlamourerApplyOnlyEquipment(_logger, tempHandler, _lastGlamourerData, applicationId, cancelToken.Token, fireAndForget: false).ConfigureAwait(false); _logger.LogDebug("[{applicationId}] Restoring Heels for {alias}/{name}", applicationId, OnlineUser.User.AliasOrUID, name); - _ipcManager.HeelsRestoreOffsetForPlayer(address); + await _ipcManager.HeelsRestoreOffsetForPlayer(address).ConfigureAwait(false); _logger.LogDebug("[{applicationId}] Restoring C+ for {alias}/{name}", applicationId, OnlineUser.User.AliasOrUID, name); - _ipcManager.CustomizePlusRevert(address); - _ipcManager.PalettePlusRemovePalette(address); + await _ipcManager.CustomizePlusRevert(address).ConfigureAwait(false); + _logger.LogDebug("[{applicationId}] Restoring Palette+ for {alias}/{name}", applicationId, OnlineUser.User.AliasOrUID, name); + await _ipcManager.PalettePlusRemovePalette(address).ConfigureAwait(false); } else if (objectKind == ObjectKind.MinionOrMount) { diff --git a/MareSynchronos/Managers/IpcManager.cs b/MareSynchronos/Managers/IpcManager.cs index 8d1e579..6ed4c87 100644 --- a/MareSynchronos/Managers/IpcManager.cs +++ b/MareSynchronos/Managers/IpcManager.cs @@ -333,10 +333,10 @@ public class IpcManager : MediatorSubscriberBase, IDisposable return _heelsGetOffset.InvokeFunc(); } - public void HeelsSetOffsetForPlayer(IntPtr character, float offset) + public async Task HeelsSetOffsetForPlayer(IntPtr character, float offset) { if (!CheckHeelsApi()) return; - ActionQueue.Enqueue(() => + await _dalamudUtil.RunOnFrameworkThread(() => { var gameObj = _dalamudUtil.CreateGameObject(character); if (gameObj != null) @@ -344,13 +344,13 @@ public class IpcManager : MediatorSubscriberBase, IDisposable _logger.LogTrace("Applying Heels data to {chara}", character.ToString("X")); _heelsRegisterPlayer.InvokeAction(gameObj, offset); } - }); + }).ConfigureAwait(false); } - public void HeelsRestoreOffsetForPlayer(IntPtr character) + public async Task HeelsRestoreOffsetForPlayer(IntPtr character) { if (!CheckHeelsApi()) return; - ActionQueue.Enqueue(() => + await _dalamudUtil.RunOnFrameworkThread(() => { var gameObj = _dalamudUtil.CreateGameObject(character); if (gameObj != null) @@ -358,7 +358,7 @@ public class IpcManager : MediatorSubscriberBase, IDisposable _logger.LogTrace("Restoring Heels data to {chara}", character.ToString("X")); _heelsUnregisterPlayer.InvokeAction(gameObj); } - }); + }).ConfigureAwait(false); } public string GetCustomizePlusScale() @@ -369,10 +369,10 @@ public class IpcManager : MediatorSubscriberBase, IDisposable return Convert.ToBase64String(Encoding.UTF8.GetBytes(scale)); } - public void CustomizePlusSetBodyScale(IntPtr character, string scale) + public async Task CustomizePlusSetBodyScale(IntPtr character, string scale) { if (!CheckCustomizePlusApi() || string.IsNullOrEmpty(scale)) return; - ActionQueue.Enqueue(() => + await _dalamudUtil.RunOnFrameworkThread(() => { var gameObj = _dalamudUtil.CreateGameObject(character); if (gameObj is Character c) @@ -381,13 +381,13 @@ public class IpcManager : MediatorSubscriberBase, IDisposable _logger.LogTrace("CustomizePlus applying for {chara}", c.Address.ToString("X")); _customizePlusSetBodyScaleToCharacter!.InvokeAction(decodedScale, c); } - }); + }).ConfigureAwait(false); } - public void CustomizePlusRevert(IntPtr character) + public async Task CustomizePlusRevert(IntPtr character) { if (!CheckCustomizePlusApi()) return; - ActionQueue.Enqueue(() => + await _dalamudUtil.RunOnFrameworkThread(() => { var gameObj = _dalamudUtil.CreateGameObject(character); if (gameObj is Character c) @@ -395,7 +395,7 @@ public class IpcManager : MediatorSubscriberBase, IDisposable _logger.LogTrace("CustomizePlus reverting for {chara}", c.Address.ToString("X")); _customizePlusRevert!.InvokeAction(c); } - }); + }).ConfigureAwait(false); } private async Task PenumbraRedrawAction(ILogger logger, GameObjectHandler obj, Guid applicationId, Action action, bool fireAndForget, CancellationToken token) @@ -605,10 +605,10 @@ public class IpcManager : MediatorSubscriberBase, IDisposable Mediator.Publish(new PalettePlusMessage(palette)); } - public void PalettePlusSetPalette(IntPtr character, string palette) + public async Task PalettePlusSetPalette(IntPtr character, string palette) { if (!CheckPalettePlusApi()) return; - ActionQueue.Enqueue(() => + await _dalamudUtil.RunOnFrameworkThread(() => { var gameObj = _dalamudUtil.CreateGameObject(character); if (gameObj is Character c) @@ -626,7 +626,7 @@ public class IpcManager : MediatorSubscriberBase, IDisposable _palettePlusSetCharaPalette!.InvokeAction(c, decodedPalette); } } - }); + }).ConfigureAwait(false); } public string PalettePlusBuildPalette() @@ -637,10 +637,10 @@ public class IpcManager : MediatorSubscriberBase, IDisposable return Convert.ToBase64String(Encoding.UTF8.GetBytes(palette)); } - public void PalettePlusRemovePalette(IntPtr character) + public async Task PalettePlusRemovePalette(IntPtr character) { if (!CheckPalettePlusApi()) return; - ActionQueue.Enqueue(() => + await _dalamudUtil.RunOnFrameworkThread(() => { var gameObj = _dalamudUtil.CreateGameObject(character); if (gameObj is Character c) @@ -648,7 +648,7 @@ public class IpcManager : MediatorSubscriberBase, IDisposable _logger.LogTrace("PalettePlus removing for {addr}", c.Address.ToString("X")); _palettePlusRemoveCharaPalette!.InvokeAction(c); } - }); + }).ConfigureAwait(false); } private void PenumbraDispose() diff --git a/MareSynchronos/Utils/DalamudUtil.cs b/MareSynchronos/Utils/DalamudUtil.cs index 8a7b119..4f858c6 100644 --- a/MareSynchronos/Utils/DalamudUtil.cs +++ b/MareSynchronos/Utils/DalamudUtil.cs @@ -252,6 +252,11 @@ public class DalamudUtil : IDisposable return null; } + public async Task RunOnFrameworkThread(Action act) + { + await _framework.RunOnFrameworkThread(act).ConfigureAwait(false); + } + public async Task RunOnFrameworkThread(Func func) { return await _framework.RunOnFrameworkThread(func).ConfigureAwait(false);