async await heels/c+/p+ stuff and await it before continuing with application of data
This commit is contained in:
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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<T> RunOnFrameworkThread<T>(Func<T> func)
|
||||
{
|
||||
return await _framework.RunOnFrameworkThread(func).ConfigureAwait(false);
|
||||
|
||||
Reference in New Issue
Block a user