Testing asyncing the transient task
This commit is contained in:
@@ -165,11 +165,37 @@ public class PlayerDataFactory
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Task<string>? getHeelsOffset = null;
|
||||||
|
Task<string>? getGlamourerData = null;
|
||||||
|
Task<string?>? getCustomizeData = null;
|
||||||
|
Task<string>? getHonorificTitle = null;
|
||||||
|
Task<string>? getMoodlesData = null;
|
||||||
|
|
||||||
|
if (objectKind == ObjectKind.Player)
|
||||||
|
{
|
||||||
|
getHeelsOffset = _ipcManager.Heels.GetOffsetAsync();
|
||||||
|
getGlamourerData = _ipcManager.Glamourer.GetCharacterCustomizationAsync(playerRelatedObject.Address);
|
||||||
|
getCustomizeData = _ipcManager.CustomizePlus.GetScaleAsync(playerRelatedObject.Address);
|
||||||
|
getHonorificTitle = _ipcManager.Honorific.GetTitle();
|
||||||
|
getMoodlesData = _ipcManager.Moodles.GetStatusAsync(playerRelatedObject.Address);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
getGlamourerData = _ipcManager.Glamourer.GetCharacterCustomizationAsync(playerRelatedObject.Address);
|
||||||
|
getCustomizeData = _ipcManager.CustomizePlus.GetScaleAsync(playerRelatedObject.Address);
|
||||||
|
}
|
||||||
|
|
||||||
|
var staticReplacements = fragment.FileReplacements.ToHashSet();
|
||||||
|
|
||||||
|
Task<(IReadOnlyDictionary<string, string[]> ResolvedPaths, HashSet<FileReplacement>? ClearedReplacements)> transientTask = Task.Run(async () =>
|
||||||
|
{
|
||||||
await _transientResourceManager.WaitForRecording(ct).ConfigureAwait(false);
|
await _transientResourceManager.WaitForRecording(ct).ConfigureAwait(false);
|
||||||
|
|
||||||
|
HashSet<FileReplacement>? clearedReplacements = null;
|
||||||
|
|
||||||
if (objectKind == ObjectKind.Pet)
|
if (objectKind == ObjectKind.Pet)
|
||||||
{
|
{
|
||||||
foreach (var item in fragment.FileReplacements.Where(i => i.HasFileReplacement).SelectMany(p => p.GamePaths))
|
foreach (var item in staticReplacements.Where(i => i.HasFileReplacement).SelectMany(p => p.GamePaths))
|
||||||
{
|
{
|
||||||
if (_transientResourceManager.AddTransientResource(objectKind, item))
|
if (_transientResourceManager.AddTransientResource(objectKind, item))
|
||||||
{
|
{
|
||||||
@@ -177,18 +203,29 @@ public class PlayerDataFactory
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_logger.LogTrace("Clearing {count} Static Replacements for Pet", fragment.FileReplacements.Count);
|
_logger.LogTrace("Clearing {count} Static Replacements for Pet", staticReplacements.Count);
|
||||||
fragment.FileReplacements.Clear();
|
clearedReplacements = staticReplacements;
|
||||||
}
|
}
|
||||||
|
|
||||||
ct.ThrowIfCancellationRequested();
|
ct.ThrowIfCancellationRequested();
|
||||||
|
|
||||||
_logger.LogDebug("Handling transient update for {obj}", playerRelatedObject);
|
_logger.LogDebug("Handling transient update for {obj}", playerRelatedObject);
|
||||||
|
|
||||||
_transientResourceManager.ClearTransientPaths(objectKind, [.. fragment.FileReplacements.SelectMany(c => c.GamePaths)]);
|
_transientResourceManager.ClearTransientPaths(objectKind, [.. staticReplacements.SelectMany(c => c.GamePaths)]);
|
||||||
|
|
||||||
var transientPaths = ManageSemiTransientData(objectKind);
|
var transientPaths = ManageSemiTransientData(objectKind);
|
||||||
var resolvedTransientPaths = await GetFileReplacementsFromPaths(playerRelatedObject, transientPaths, new HashSet<string>(StringComparer.Ordinal)).ConfigureAwait(false);
|
IReadOnlyDictionary<string, string[]> resolved = await GetFileReplacementsFromPaths(playerRelatedObject, transientPaths, new HashSet<string>(StringComparer.Ordinal)).ConfigureAwait(false);
|
||||||
|
return (resolved, clearedReplacements);
|
||||||
|
}, ct);
|
||||||
|
|
||||||
|
ct.ThrowIfCancellationRequested();
|
||||||
|
|
||||||
|
var (resolvedTransientPaths, clearedForPet) = await transientTask.ConfigureAwait(false);
|
||||||
|
|
||||||
|
if (clearedForPet != null)
|
||||||
|
{
|
||||||
|
fragment.FileReplacements.Clear();
|
||||||
|
}
|
||||||
|
|
||||||
if (logDebug)
|
if (logDebug)
|
||||||
{
|
{
|
||||||
@@ -213,11 +250,6 @@ public class PlayerDataFactory
|
|||||||
|
|
||||||
fragment.FileReplacements = new HashSet<FileReplacement>(fragment.FileReplacements.Where(v => v.HasFileReplacement).OrderBy(v => v.ResolvedPath, StringComparer.Ordinal), FileReplacementComparer.Instance);
|
fragment.FileReplacements = new HashSet<FileReplacement>(fragment.FileReplacements.Where(v => v.HasFileReplacement).OrderBy(v => v.ResolvedPath, StringComparer.Ordinal), FileReplacementComparer.Instance);
|
||||||
|
|
||||||
// gather up data from ipc
|
|
||||||
Task<string> getHeelsOffset = _ipcManager.Heels.GetOffsetAsync();
|
|
||||||
Task<string> getGlamourerData = _ipcManager.Glamourer.GetCharacterCustomizationAsync(playerRelatedObject.Address);
|
|
||||||
Task<string?> getCustomizeData = _ipcManager.CustomizePlus.GetScaleAsync(playerRelatedObject.Address);
|
|
||||||
Task<string> getHonorificTitle = _ipcManager.Honorific.GetTitle();
|
|
||||||
fragment.GlamourerString = await getGlamourerData.ConfigureAwait(false);
|
fragment.GlamourerString = await getGlamourerData.ConfigureAwait(false);
|
||||||
_logger.LogDebug("Glamourer is now: {data}", fragment.GlamourerString);
|
_logger.LogDebug("Glamourer is now: {data}", fragment.GlamourerString);
|
||||||
var customizeScale = await getCustomizeData.ConfigureAwait(false);
|
var customizeScale = await getCustomizeData.ConfigureAwait(false);
|
||||||
@@ -229,13 +261,13 @@ public class PlayerDataFactory
|
|||||||
var playerFragment = (fragment as CharacterDataFragmentPlayer)!;
|
var playerFragment = (fragment as CharacterDataFragmentPlayer)!;
|
||||||
playerFragment.ManipulationString = _ipcManager.Penumbra.GetMetaManipulations();
|
playerFragment.ManipulationString = _ipcManager.Penumbra.GetMetaManipulations();
|
||||||
|
|
||||||
playerFragment!.HonorificData = await getHonorificTitle.ConfigureAwait(false);
|
playerFragment!.HonorificData = await getHonorificTitle!.ConfigureAwait(false);
|
||||||
_logger.LogDebug("Honorific is now: {data}", playerFragment!.HonorificData);
|
_logger.LogDebug("Honorific is now: {data}", playerFragment!.HonorificData);
|
||||||
|
|
||||||
playerFragment!.HeelsData = await getHeelsOffset.ConfigureAwait(false);
|
playerFragment!.HeelsData = await getHeelsOffset!.ConfigureAwait(false);
|
||||||
_logger.LogDebug("Heels is now: {heels}", playerFragment!.HeelsData);
|
_logger.LogDebug("Heels is now: {heels}", playerFragment!.HeelsData);
|
||||||
|
|
||||||
playerFragment!.MoodlesData = await _ipcManager.Moodles.GetStatusAsync(playerRelatedObject.Address).ConfigureAwait(false) ?? string.Empty;
|
playerFragment!.MoodlesData = await getMoodlesData!.ConfigureAwait(false) ?? string.Empty;
|
||||||
_logger.LogDebug("Moodles is now: {moodles}", playerFragment!.MoodlesData);
|
_logger.LogDebug("Moodles is now: {moodles}", playerFragment!.MoodlesData);
|
||||||
|
|
||||||
playerFragment!.PetNamesData = _ipcManager.PetNames.GetLocalNames();
|
playerFragment!.PetNamesData = _ipcManager.PetNames.GetLocalNames();
|
||||||
|
|||||||
Reference in New Issue
Block a user