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
previousData.ManipulationString = _ipcManager.PenumbraGetMetaManipulations();
previousData.HeelsOffset = _ipcManager.GetHeelsOffset();
Task<string> getGlamourerData = new(() => _ipcManager.GlamourerGetCharacterCustomization(playerRelatedObject.Address));
_processingQueue.Enqueue(getGlamourerData);
Task<string> getCustomizeData = new(() => _ipcManager.GetCustomizePlusScale());
_processingQueue.Enqueue(getCustomizeData);
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);
Task<string> getGlamourerData = Task.Run(() => _ipcManager.GlamourerGetCharacterCustomization(playerRelatedObject.Address));
Task<string> getCustomizeData = Task.Run(() => _ipcManager.GetCustomizePlusScale());
Task<string> getPalettePlusData = Task.Run(() => _ipcManager.PalettePlusBuildPalette());
previousData.GlamourerString[playerRelatedObject.ObjectKind] = await getGlamourerData.ConfigureAwait(false);
_logger.LogDebug("Glamourer is now: {data}", previousData.GlamourerString[playerRelatedObject.ObjectKind]);
previousData.CustomizePlusScale = await getCustomizeData.ConfigureAwait(false);
_logger.LogDebug("Customize is now: {data}", previousData.CustomizePlusScale);
previousData.PalettePlusPalette = await getPalettePlusData.ConfigureAwait(false);
_logger.LogDebug("Palette is now: {data}", previousData.PalettePlusPalette);
// 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
_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);
});
}, downloadToken).ContinueWith(task =>
{
_downloadCancellationTokenSource = null;
if (!task.IsCanceled) return;
_logger.LogDebug("Download was cancelled");
_apiController.CancelDownload(downloadId);
});
}, downloadToken);
}
private Task? _applicationTask;

View File

@@ -124,7 +124,7 @@ public class GameObjectHandler : MediatorSubscriberBase
|| (((GameObject*)curPtr)->RenderFlags & 0b100000000000) == 0b100000000000;
}
public async Task<bool> IsBeingDrawn()
public async Task<bool> IsBeingDrawnRunOnFramework()
{
return await _dalamudUtil.RunOnFrameworkThread(() =>
{

View File

@@ -254,11 +254,13 @@ public class DalamudUtil : IDisposable
public async Task RunOnFrameworkThread(Action act)
{
_logger.LogTrace("Running Action on framework thread: {act}", act);
await _framework.RunOnFrameworkThread(act).ConfigureAwait(false);
}
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);
}
@@ -275,11 +277,11 @@ public class DalamudUtil : IDisposable
// ReSharper disable once LoopVariableIsNeverChangedInsideLoop
while ((!ct?.IsCancellationRequested ?? true)
&& 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");
curWaitTime += tick;
Thread.Sleep(tick);
await Task.Delay(tick).ConfigureAwait(true);
}
logger.LogTrace($"[{redrawId}] Finished drawing after {curWaitTime}ms");