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)
{
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)
{

View File

@@ -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()