fix crashing and such

This commit is contained in:
rootdarkarchon
2023-02-27 12:05:53 +01:00
parent 912d0bd800
commit a37281b719
4 changed files with 16 additions and 21 deletions

View File

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

View File

@@ -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;

View File

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

View File

@@ -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");