increase timeouts

This commit is contained in:
Stanley Dimant
2022-09-14 10:41:51 +02:00
parent 4d97f7ebea
commit c9dc0e8468
5 changed files with 12 additions and 15 deletions

View File

@@ -121,7 +121,7 @@ public class CharacterDataFactory
Logger.Warn("Could not get model data for " + objectKind); Logger.Warn("Could not get model data for " + objectKind);
return; return;
} }
//Logger.Verbose("Checking File Replacement for Model " + mdlPath); Logger.Verbose("Checking File Replacement for Model " + mdlPath);
FileReplacement mdlFileReplacement = CreateFileReplacement(mdlPath); FileReplacement mdlFileReplacement = CreateFileReplacement(mdlPath);
DebugPrint(mdlFileReplacement, objectKind, "Model", inheritanceLevel); DebugPrint(mdlFileReplacement, objectKind, "Model", inheritanceLevel);
@@ -151,7 +151,7 @@ public class CharacterDataFactory
return; return;
} }
Logger.Verbose("Check File Replacement for Material " + fileName); Logger.Verbose("Checking File Replacement for Material " + fileName);
var mtrlPath = fileName.Split("|")[2]; var mtrlPath = fileName.Split("|")[2];
if (cache.FileReplacements.ContainsKey(objectKind)) if (cache.FileReplacements.ContainsKey(objectKind))
@@ -182,7 +182,7 @@ public class CharacterDataFactory
if (string.IsNullOrEmpty(texPath)) continue; if (string.IsNullOrEmpty(texPath)) continue;
Logger.Verbose("Check File Replacement for Texture " + texPath); Logger.Verbose("Checking File Replacement for Texture " + texPath);
AddReplacementsFromTexture(texPath, objectKind, cache, inheritanceLevel + 1); AddReplacementsFromTexture(texPath, objectKind, cache, inheritanceLevel + 1);
} }
@@ -260,7 +260,7 @@ public class CharacterDataFactory
Thread.Sleep(50); Thread.Sleep(50);
} }
_dalamudUtil.WaitWhileCharacterIsDrawing(objectKind.ToString(), charaPointer); _dalamudUtil.WaitWhileCharacterIsDrawing(objectKind.ToString(), charaPointer, 15000);
var human = (Human*)((Character*)charaPointer)->GameObject.GetDrawObject(); var human = (Human*)((Character*)charaPointer)->GameObject.GetDrawObject();
for (var mdlIdx = 0; mdlIdx < human->CharacterBase.SlotCount; ++mdlIdx) for (var mdlIdx = 0; mdlIdx < human->CharacterBase.SlotCount; ++mdlIdx)

View File

@@ -244,7 +244,7 @@ public class CachedPlayer
if (objectKind == ObjectKind.Player) if (objectKind == ObjectKind.Player)
{ {
_dalamudUtil.WaitWhileCharacterIsDrawing(PlayerName!, PlayerCharacter, ct); _dalamudUtil.WaitWhileCharacterIsDrawing(PlayerName!, PlayerCharacter, 10000, ct);
ct.ThrowIfCancellationRequested(); ct.ThrowIfCancellationRequested();
_ipcManager.HeelsSetOffsetForPlayer(_cachedData.HeelsOffset, PlayerCharacter); _ipcManager.HeelsSetOffsetForPlayer(_cachedData.HeelsOffset, PlayerCharacter);
RequestedPenumbraRedraw = true; RequestedPenumbraRedraw = true;
@@ -265,7 +265,7 @@ public class CachedPlayer
if (minionOrMount != null) if (minionOrMount != null)
{ {
Logger.Debug($"Request Redraw for Minion/Mount"); Logger.Debug($"Request Redraw for Minion/Mount");
_dalamudUtil.WaitWhileCharacterIsDrawing(PlayerName! + " minion or mount", (IntPtr)minionOrMount, ct); _dalamudUtil.WaitWhileCharacterIsDrawing(PlayerName! + " minion or mount", (IntPtr)minionOrMount, 10000, ct);
ct.ThrowIfCancellationRequested(); ct.ThrowIfCancellationRequested();
if (_ipcManager.CheckGlamourerApi() && !string.IsNullOrEmpty(glamourerData)) if (_ipcManager.CheckGlamourerApi() && !string.IsNullOrEmpty(glamourerData))
{ {
@@ -311,7 +311,7 @@ public class CachedPlayer
if (companion != IntPtr.Zero) if (companion != IntPtr.Zero)
{ {
Logger.Debug("Request Redraw for Companion"); Logger.Debug("Request Redraw for Companion");
_dalamudUtil.WaitWhileCharacterIsDrawing(PlayerName! + " companion", companion, ct); _dalamudUtil.WaitWhileCharacterIsDrawing(PlayerName! + " companion", companion, 10000,ct);
ct.ThrowIfCancellationRequested(); ct.ThrowIfCancellationRequested();
if (_ipcManager.CheckGlamourerApi() && !string.IsNullOrEmpty(glamourerData)) if (_ipcManager.CheckGlamourerApi() && !string.IsNullOrEmpty(glamourerData))
{ {
@@ -460,7 +460,7 @@ public class CachedPlayer
PlayerCharacter = address; PlayerCharacter = address;
var cts = new CancellationTokenSource(); var cts = new CancellationTokenSource();
cts.CancelAfter(TimeSpan.FromSeconds(5)); cts.CancelAfter(TimeSpan.FromSeconds(5));
_dalamudUtil.WaitWhileCharacterIsDrawing(PlayerName!, PlayerCharacter, cts.Token); _dalamudUtil.WaitWhileCharacterIsDrawing(PlayerName!, PlayerCharacter, 10000, cts.Token);
cts.Dispose(); cts.Dispose();
cts = new CancellationTokenSource(); cts = new CancellationTokenSource();
cts.CancelAfter(TimeSpan.FromSeconds(5)); cts.CancelAfter(TimeSpan.FromSeconds(5));

View File

@@ -230,7 +230,7 @@ namespace MareSynchronos.Managers
{ {
foreach (var item in unprocessedObjects) foreach (var item in unprocessedObjects)
{ {
_dalamudUtil.WaitWhileCharacterIsDrawing("self " + item.ObjectKind.ToString(), item.Address, token); _dalamudUtil.WaitWhileCharacterIsDrawing("self " + item.ObjectKind.ToString(), item.Address, 10000, token);
} }
CharacterCacheDto? cacheDto = (await CreateFullCharacterCacheDto(token)); CharacterCacheDto? cacheDto = (await CreateFullCharacterCacheDto(token));

View File

@@ -3,7 +3,7 @@
<PropertyGroup> <PropertyGroup>
<Authors></Authors> <Authors></Authors>
<Company></Company> <Company></Company>
<Version>0.4.4</Version> <Version>0.4.5</Version>
<Description></Description> <Description></Description>
<Copyright></Copyright> <Copyright></Copyright>
<PackageProjectUrl>https://github.com/Penumbra-Sync/client</PackageProjectUrl> <PackageProjectUrl>https://github.com/Penumbra-Sync/client</PackageProjectUrl>

View File

@@ -195,16 +195,15 @@ namespace MareSynchronos.Utils
return await _framework.RunOnFrameworkThread(func); return await _framework.RunOnFrameworkThread(func);
} }
public unsafe void WaitWhileCharacterIsDrawing(string name, IntPtr characterAddress, CancellationToken? ct = null) public unsafe void WaitWhileCharacterIsDrawing(string name, IntPtr characterAddress, int timeOut = 5000, CancellationToken? ct = null)
{ {
if (!_clientState.IsLoggedIn || characterAddress == IntPtr.Zero) return; if (!_clientState.IsLoggedIn || characterAddress == IntPtr.Zero) return;
var obj = (GameObject*)characterAddress; var obj = (GameObject*)characterAddress;
const int maxWaitTime = 5000;
const int tick = 250; const int tick = 250;
int curWaitTime = 0; int curWaitTime = 0;
// ReSharper disable once LoopVariableIsNeverChangedInsideLoop // ReSharper disable once LoopVariableIsNeverChangedInsideLoop
while ((obj->RenderFlags & 0b100000000000) == 0b100000000000 && (!ct?.IsCancellationRequested ?? true) && curWaitTime < maxWaitTime) // 0b100000000000 is "still rendering" or something while ((obj->RenderFlags & 0b100000000000) == 0b100000000000 && (!ct?.IsCancellationRequested ?? true) && curWaitTime < timeOut) // 0b100000000000 is "still rendering" or something
{ {
Logger.Verbose($"Waiting for {name} to finish drawing"); Logger.Verbose($"Waiting for {name} to finish drawing");
curWaitTime += tick; curWaitTime += tick;
@@ -216,8 +215,6 @@ namespace MareSynchronos.Utils
Thread.Sleep(tick); Thread.Sleep(tick);
} }
public void WaitWhileSelfIsDrawing(CancellationToken? token) => WaitWhileCharacterIsDrawing("self", _clientState.LocalPlayer?.Address ?? IntPtr.Zero, token);
public void Dispose() public void Dispose()
{ {
_clientState.Login -= ClientStateOnLogin; _clientState.Login -= ClientStateOnLogin;