async await heels/c+/p+ stuff and await it before continuing with application of data

This commit is contained in:
rootdarkarchon
2023-02-27 02:01:20 +01:00
parent b42e7e236c
commit 1aef3b1d2e
3 changed files with 30 additions and 24 deletions

View File

@@ -317,13 +317,13 @@ public class CachedPlayer : MediatorSubscriberBase, IDisposable
switch (change) switch (change)
{ {
case PlayerChanges.Palette: case PlayerChanges.Palette:
_ipcManager.PalettePlusSetPalette(handler.Address, charaData.PalettePlusData); await _ipcManager.PalettePlusSetPalette(handler.Address, charaData.PalettePlusData).ConfigureAwait(false);
break; break;
case PlayerChanges.Customize: case PlayerChanges.Customize:
_ipcManager.CustomizePlusSetBodyScale(handler.Address, charaData.CustomizePlusData); await _ipcManager.CustomizePlusSetBodyScale(handler.Address, charaData.CustomizePlusData).ConfigureAwait(false);
break; break;
case PlayerChanges.Heels: case PlayerChanges.Heels:
_ipcManager.HeelsSetOffsetForPlayer(handler.Address, charaData.HeelsOffset); await _ipcManager.HeelsSetOffsetForPlayer(handler.Address, charaData.HeelsOffset).ConfigureAwait(false);
break; break;
case PlayerChanges.Mods: case PlayerChanges.Mods:
if (charaData.GlamourerData.TryGetValue(changes.Key, out var glamourerData)) 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); _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); 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); _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); _logger.LogDebug("[{applicationId}] Restoring C+ for {alias}/{name}", applicationId, OnlineUser.User.AliasOrUID, name);
_ipcManager.CustomizePlusRevert(address); await _ipcManager.CustomizePlusRevert(address).ConfigureAwait(false);
_ipcManager.PalettePlusRemovePalette(address); _logger.LogDebug("[{applicationId}] Restoring Palette+ for {alias}/{name}", applicationId, OnlineUser.User.AliasOrUID, name);
await _ipcManager.PalettePlusRemovePalette(address).ConfigureAwait(false);
} }
else if (objectKind == ObjectKind.MinionOrMount) else if (objectKind == ObjectKind.MinionOrMount)
{ {

View File

@@ -333,10 +333,10 @@ public class IpcManager : MediatorSubscriberBase, IDisposable
return _heelsGetOffset.InvokeFunc(); return _heelsGetOffset.InvokeFunc();
} }
public void HeelsSetOffsetForPlayer(IntPtr character, float offset) public async Task HeelsSetOffsetForPlayer(IntPtr character, float offset)
{ {
if (!CheckHeelsApi()) return; if (!CheckHeelsApi()) return;
ActionQueue.Enqueue(() => await _dalamudUtil.RunOnFrameworkThread(() =>
{ {
var gameObj = _dalamudUtil.CreateGameObject(character); var gameObj = _dalamudUtil.CreateGameObject(character);
if (gameObj != null) if (gameObj != null)
@@ -344,13 +344,13 @@ public class IpcManager : MediatorSubscriberBase, IDisposable
_logger.LogTrace("Applying Heels data to {chara}", character.ToString("X")); _logger.LogTrace("Applying Heels data to {chara}", character.ToString("X"));
_heelsRegisterPlayer.InvokeAction(gameObj, offset); _heelsRegisterPlayer.InvokeAction(gameObj, offset);
} }
}); }).ConfigureAwait(false);
} }
public void HeelsRestoreOffsetForPlayer(IntPtr character) public async Task HeelsRestoreOffsetForPlayer(IntPtr character)
{ {
if (!CheckHeelsApi()) return; if (!CheckHeelsApi()) return;
ActionQueue.Enqueue(() => await _dalamudUtil.RunOnFrameworkThread(() =>
{ {
var gameObj = _dalamudUtil.CreateGameObject(character); var gameObj = _dalamudUtil.CreateGameObject(character);
if (gameObj != null) if (gameObj != null)
@@ -358,7 +358,7 @@ public class IpcManager : MediatorSubscriberBase, IDisposable
_logger.LogTrace("Restoring Heels data to {chara}", character.ToString("X")); _logger.LogTrace("Restoring Heels data to {chara}", character.ToString("X"));
_heelsUnregisterPlayer.InvokeAction(gameObj); _heelsUnregisterPlayer.InvokeAction(gameObj);
} }
}); }).ConfigureAwait(false);
} }
public string GetCustomizePlusScale() public string GetCustomizePlusScale()
@@ -369,10 +369,10 @@ public class IpcManager : MediatorSubscriberBase, IDisposable
return Convert.ToBase64String(Encoding.UTF8.GetBytes(scale)); 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; if (!CheckCustomizePlusApi() || string.IsNullOrEmpty(scale)) return;
ActionQueue.Enqueue(() => await _dalamudUtil.RunOnFrameworkThread(() =>
{ {
var gameObj = _dalamudUtil.CreateGameObject(character); var gameObj = _dalamudUtil.CreateGameObject(character);
if (gameObj is Character c) if (gameObj is Character c)
@@ -381,13 +381,13 @@ public class IpcManager : MediatorSubscriberBase, IDisposable
_logger.LogTrace("CustomizePlus applying for {chara}", c.Address.ToString("X")); _logger.LogTrace("CustomizePlus applying for {chara}", c.Address.ToString("X"));
_customizePlusSetBodyScaleToCharacter!.InvokeAction(decodedScale, c); _customizePlusSetBodyScaleToCharacter!.InvokeAction(decodedScale, c);
} }
}); }).ConfigureAwait(false);
} }
public void CustomizePlusRevert(IntPtr character) public async Task CustomizePlusRevert(IntPtr character)
{ {
if (!CheckCustomizePlusApi()) return; if (!CheckCustomizePlusApi()) return;
ActionQueue.Enqueue(() => await _dalamudUtil.RunOnFrameworkThread(() =>
{ {
var gameObj = _dalamudUtil.CreateGameObject(character); var gameObj = _dalamudUtil.CreateGameObject(character);
if (gameObj is Character c) if (gameObj is Character c)
@@ -395,7 +395,7 @@ public class IpcManager : MediatorSubscriberBase, IDisposable
_logger.LogTrace("CustomizePlus reverting for {chara}", c.Address.ToString("X")); _logger.LogTrace("CustomizePlus reverting for {chara}", c.Address.ToString("X"));
_customizePlusRevert!.InvokeAction(c); _customizePlusRevert!.InvokeAction(c);
} }
}); }).ConfigureAwait(false);
} }
private async Task PenumbraRedrawAction(ILogger logger, GameObjectHandler obj, Guid applicationId, Action action, bool fireAndForget, CancellationToken token) 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)); Mediator.Publish(new PalettePlusMessage(palette));
} }
public void PalettePlusSetPalette(IntPtr character, string palette) public async Task PalettePlusSetPalette(IntPtr character, string palette)
{ {
if (!CheckPalettePlusApi()) return; if (!CheckPalettePlusApi()) return;
ActionQueue.Enqueue(() => await _dalamudUtil.RunOnFrameworkThread(() =>
{ {
var gameObj = _dalamudUtil.CreateGameObject(character); var gameObj = _dalamudUtil.CreateGameObject(character);
if (gameObj is Character c) if (gameObj is Character c)
@@ -626,7 +626,7 @@ public class IpcManager : MediatorSubscriberBase, IDisposable
_palettePlusSetCharaPalette!.InvokeAction(c, decodedPalette); _palettePlusSetCharaPalette!.InvokeAction(c, decodedPalette);
} }
} }
}); }).ConfigureAwait(false);
} }
public string PalettePlusBuildPalette() public string PalettePlusBuildPalette()
@@ -637,10 +637,10 @@ public class IpcManager : MediatorSubscriberBase, IDisposable
return Convert.ToBase64String(Encoding.UTF8.GetBytes(palette)); return Convert.ToBase64String(Encoding.UTF8.GetBytes(palette));
} }
public void PalettePlusRemovePalette(IntPtr character) public async Task PalettePlusRemovePalette(IntPtr character)
{ {
if (!CheckPalettePlusApi()) return; if (!CheckPalettePlusApi()) return;
ActionQueue.Enqueue(() => await _dalamudUtil.RunOnFrameworkThread(() =>
{ {
var gameObj = _dalamudUtil.CreateGameObject(character); var gameObj = _dalamudUtil.CreateGameObject(character);
if (gameObj is Character c) if (gameObj is Character c)
@@ -648,7 +648,7 @@ public class IpcManager : MediatorSubscriberBase, IDisposable
_logger.LogTrace("PalettePlus removing for {addr}", c.Address.ToString("X")); _logger.LogTrace("PalettePlus removing for {addr}", c.Address.ToString("X"));
_palettePlusRemoveCharaPalette!.InvokeAction(c); _palettePlusRemoveCharaPalette!.InvokeAction(c);
} }
}); }).ConfigureAwait(false);
} }
private void PenumbraDispose() private void PenumbraDispose()

View File

@@ -252,6 +252,11 @@ public class DalamudUtil : IDisposable
return null; return null;
} }
public async Task RunOnFrameworkThread(Action act)
{
await _framework.RunOnFrameworkThread(act).ConfigureAwait(false);
}
public async Task<T> RunOnFrameworkThread<T>(Func<T> func) public async Task<T> RunOnFrameworkThread<T>(Func<T> func)
{ {
return await _framework.RunOnFrameworkThread(func).ConfigureAwait(false); return await _framework.RunOnFrameworkThread(func).ConfigureAwait(false);