fix crashing and such
This commit is contained in:
@@ -145,18 +145,14 @@ public class CharacterDataFactory : MediatorSubscriberBase
|
|||||||
// gather up data from ipc
|
// gather up data from ipc
|
||||||
previousData.ManipulationString = _ipcManager.PenumbraGetMetaManipulations();
|
previousData.ManipulationString = _ipcManager.PenumbraGetMetaManipulations();
|
||||||
previousData.HeelsOffset = _ipcManager.GetHeelsOffset();
|
previousData.HeelsOffset = _ipcManager.GetHeelsOffset();
|
||||||
Task<string> getGlamourerData = new(() => _ipcManager.GlamourerGetCharacterCustomization(playerRelatedObject.Address));
|
Task<string> getGlamourerData = Task.Run(() => _ipcManager.GlamourerGetCharacterCustomization(playerRelatedObject.Address));
|
||||||
_processingQueue.Enqueue(getGlamourerData);
|
Task<string> getCustomizeData = Task.Run(() => _ipcManager.GetCustomizePlusScale());
|
||||||
Task<string> getCustomizeData = new(() => _ipcManager.GetCustomizePlusScale());
|
Task<string> getPalettePlusData = Task.Run(() => _ipcManager.PalettePlusBuildPalette());
|
||||||
_processingQueue.Enqueue(getCustomizeData);
|
previousData.GlamourerString[playerRelatedObject.ObjectKind] = await getGlamourerData.ConfigureAwait(false);
|
||||||
Task<string> getPalettePlusData = new(() => _ipcManager.PalettePlusBuildPalette());
|
|
||||||
_processingQueue.Enqueue(getPalettePlusData);
|
|
||||||
Task.WaitAll(new[] { getGlamourerData, getCustomizeData, getPalettePlusData }, token);
|
|
||||||
previousData.GlamourerString[playerRelatedObject.ObjectKind] = await getGlamourerData.ConfigureAwait(true);
|
|
||||||
previousData.CustomizePlusScale = await getCustomizeData.ConfigureAwait(true);
|
|
||||||
previousData.PalettePlusPalette = await getPalettePlusData.ConfigureAwait(true);
|
|
||||||
_logger.LogDebug("Glamourer is now: {data}", previousData.GlamourerString[playerRelatedObject.ObjectKind]);
|
_logger.LogDebug("Glamourer is now: {data}", previousData.GlamourerString[playerRelatedObject.ObjectKind]);
|
||||||
|
previousData.CustomizePlusScale = await getCustomizeData.ConfigureAwait(false);
|
||||||
_logger.LogDebug("Customize is now: {data}", previousData.CustomizePlusScale);
|
_logger.LogDebug("Customize is now: {data}", previousData.CustomizePlusScale);
|
||||||
|
previousData.PalettePlusPalette = await getPalettePlusData.ConfigureAwait(false);
|
||||||
_logger.LogDebug("Palette is now: {data}", previousData.PalettePlusPalette);
|
_logger.LogDebug("Palette is now: {data}", previousData.PalettePlusPalette);
|
||||||
|
|
||||||
// gather static replacements from render model
|
// gather static replacements from render model
|
||||||
|
|||||||
@@ -390,7 +390,7 @@ public class CachedPlayer : MediatorSubscriberBase, IDisposable
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
while (!_applicationTask?.IsCompleted ?? false)
|
while (!_applicationTask?.IsCompleted ?? false && !downloadToken.IsCancellationRequested)
|
||||||
{
|
{
|
||||||
// block until current application is done
|
// block until current application is done
|
||||||
_logger.LogDebug("Waiting for current data application (Id: {id}) to finish", _applicationId);
|
_logger.LogDebug("Waiting for current data application (Id: {id}) to finish", _applicationId);
|
||||||
@@ -416,15 +416,12 @@ public class CachedPlayer : MediatorSubscriberBase, IDisposable
|
|||||||
_logger.LogDebug("[{applicationId}] Application finished", _applicationId);
|
_logger.LogDebug("[{applicationId}] Application finished", _applicationId);
|
||||||
});
|
});
|
||||||
|
|
||||||
}, downloadToken).ContinueWith(task =>
|
|
||||||
{
|
|
||||||
_downloadCancellationTokenSource = null;
|
_downloadCancellationTokenSource = null;
|
||||||
|
|
||||||
if (!task.IsCanceled) return;
|
|
||||||
|
|
||||||
_logger.LogDebug("Download was cancelled");
|
_logger.LogDebug("Download was cancelled");
|
||||||
_apiController.CancelDownload(downloadId);
|
_apiController.CancelDownload(downloadId);
|
||||||
});
|
|
||||||
|
}, downloadToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Task? _applicationTask;
|
private Task? _applicationTask;
|
||||||
|
|||||||
@@ -124,7 +124,7 @@ public class GameObjectHandler : MediatorSubscriberBase
|
|||||||
|| (((GameObject*)curPtr)->RenderFlags & 0b100000000000) == 0b100000000000;
|
|| (((GameObject*)curPtr)->RenderFlags & 0b100000000000) == 0b100000000000;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<bool> IsBeingDrawn()
|
public async Task<bool> IsBeingDrawnRunOnFramework()
|
||||||
{
|
{
|
||||||
return await _dalamudUtil.RunOnFrameworkThread(() =>
|
return await _dalamudUtil.RunOnFrameworkThread(() =>
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -254,11 +254,13 @@ public class DalamudUtil : IDisposable
|
|||||||
|
|
||||||
public async Task RunOnFrameworkThread(Action act)
|
public async Task RunOnFrameworkThread(Action act)
|
||||||
{
|
{
|
||||||
|
_logger.LogTrace("Running Action on framework thread: {act}", act);
|
||||||
await _framework.RunOnFrameworkThread(act).ConfigureAwait(false);
|
await _framework.RunOnFrameworkThread(act).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<T> RunOnFrameworkThread<T>(Func<T> func)
|
public async Task<T> RunOnFrameworkThread<T>(Func<T> func)
|
||||||
{
|
{
|
||||||
|
_logger.LogTrace("Running Func on framework thread: {func}", func);
|
||||||
return await _framework.RunOnFrameworkThread(func).ConfigureAwait(false);
|
return await _framework.RunOnFrameworkThread(func).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -275,11 +277,11 @@ public class DalamudUtil : IDisposable
|
|||||||
// ReSharper disable once LoopVariableIsNeverChangedInsideLoop
|
// ReSharper disable once LoopVariableIsNeverChangedInsideLoop
|
||||||
while ((!ct?.IsCancellationRequested ?? true)
|
while ((!ct?.IsCancellationRequested ?? true)
|
||||||
&& curWaitTime < timeOut
|
&& curWaitTime < timeOut
|
||||||
&& await handler.IsBeingDrawn().ConfigureAwait(false)) // 0b100000000000 is "still rendering" or something
|
&& await handler.IsBeingDrawnRunOnFramework().ConfigureAwait(true)) // 0b100000000000 is "still rendering" or something
|
||||||
{
|
{
|
||||||
logger.LogTrace($"[{redrawId}] Waiting for {handler} to finish drawing");
|
logger.LogTrace($"[{redrawId}] Waiting for {handler} to finish drawing");
|
||||||
curWaitTime += tick;
|
curWaitTime += tick;
|
||||||
Thread.Sleep(tick);
|
await Task.Delay(tick).ConfigureAwait(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
logger.LogTrace($"[{redrawId}] Finished drawing after {curWaitTime}ms");
|
logger.LogTrace($"[{redrawId}] Finished drawing after {curWaitTime}ms");
|
||||||
|
|||||||
Reference in New Issue
Block a user