actually fix not sending data properly
This commit is contained in:
@@ -31,7 +31,7 @@ public class CharacterDataFactory
|
|||||||
_ipcManager = ipcManager;
|
_ipcManager = ipcManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
public CharacterData BuildCharacterData(CharacterData previousData, ObjectKind objectKind, IntPtr playerPointer)
|
public CharacterData BuildCharacterData(CharacterData previousData, ObjectKind objectKind, IntPtr playerPointer, CancellationToken token)
|
||||||
{
|
{
|
||||||
if (!_ipcManager.Initialized)
|
if (!_ipcManager.Initialized)
|
||||||
{
|
{
|
||||||
@@ -48,7 +48,12 @@ public class CharacterDataFactory
|
|||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
return CreateCharacterData(previousData, objectKind, playerPointer);
|
return CreateCharacterData(previousData, objectKind, playerPointer, token);
|
||||||
|
}
|
||||||
|
catch (OperationCanceledException)
|
||||||
|
{
|
||||||
|
Logger.Debug("Cancelled creating Character data");
|
||||||
|
return previousData;
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
@@ -186,7 +191,7 @@ public class CharacterDataFactory
|
|||||||
cache.AddFileReplacement(objectKind, texDx11Replacement);
|
cache.AddFileReplacement(objectKind, texDx11Replacement);
|
||||||
}
|
}
|
||||||
|
|
||||||
private unsafe CharacterData CreateCharacterData(CharacterData previousData, ObjectKind objectKind, IntPtr charaPointer)
|
private unsafe CharacterData CreateCharacterData(CharacterData previousData, ObjectKind objectKind, IntPtr charaPointer, CancellationToken token)
|
||||||
{
|
{
|
||||||
Stopwatch st = Stopwatch.StartNew();
|
Stopwatch st = Stopwatch.StartNew();
|
||||||
var chara = _dalamudUtil.CreateGameObject(charaPointer)!;
|
var chara = _dalamudUtil.CreateGameObject(charaPointer)!;
|
||||||
@@ -218,6 +223,8 @@ public class CharacterDataFactory
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
token.ThrowIfCancellationRequested();
|
||||||
|
|
||||||
AddReplacementsFromRenderModel(mdl, objectKind, previousData, 0);
|
AddReplacementsFromRenderModel(mdl, objectKind, previousData, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -108,10 +108,10 @@ namespace MareSynchronos.Managers
|
|||||||
foreach (var unprocessedObject in playerRelatedObjects.Where(c => c.HasUnprocessedUpdate).ToList())
|
foreach (var unprocessedObject in playerRelatedObjects.Where(c => c.HasUnprocessedUpdate).ToList())
|
||||||
{
|
{
|
||||||
Logger.Verbose("Building Cache for " + unprocessedObject.ObjectKind);
|
Logger.Verbose("Building Cache for " + unprocessedObject.ObjectKind);
|
||||||
PermanentDataCache = _characterDataFactory.BuildCharacterData(PermanentDataCache, unprocessedObject.ObjectKind, unprocessedObject.Address);
|
PermanentDataCache = _characterDataFactory.BuildCharacterData(PermanentDataCache, unprocessedObject.ObjectKind, unprocessedObject.Address, token);
|
||||||
unprocessedObject.HasUnprocessedUpdate = false;
|
|
||||||
unprocessedObject.IsProcessing = false;
|
unprocessedObject.IsProcessing = false;
|
||||||
token.ThrowIfCancellationRequested();
|
token.ThrowIfCancellationRequested();
|
||||||
|
unprocessedObject.HasUnprocessedUpdate = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
while (!PermanentDataCache.IsReady && !token.IsCancellationRequested)
|
while (!PermanentDataCache.IsReady && !token.IsCancellationRequested)
|
||||||
@@ -139,7 +139,7 @@ namespace MareSynchronos.Managers
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (playerRelatedObjects.Any(c => c.HasUnprocessedUpdate && !c.IsProcessing))
|
if (playerRelatedObjects.Any(c => c.HasUnprocessedUpdate && (!c.IsProcessing || (c.IsProcessing && c.DoNotSendUpdate))))
|
||||||
{
|
{
|
||||||
OnPlayerOrAttachedObjectsChanged();
|
OnPlayerOrAttachedObjectsChanged();
|
||||||
}
|
}
|
||||||
@@ -155,6 +155,8 @@ namespace MareSynchronos.Managers
|
|||||||
unprocessedObject.IsProcessing = true;
|
unprocessedObject.IsProcessing = true;
|
||||||
}
|
}
|
||||||
Logger.Debug("Object(s) changed: " + string.Join(", ", unprocessedObjects.Select(c => c.ObjectKind)));
|
Logger.Debug("Object(s) changed: " + string.Join(", ", unprocessedObjects.Select(c => c.ObjectKind)));
|
||||||
|
bool doNotSendUpdate = unprocessedObjects.All(c => c.DoNotSendUpdate);
|
||||||
|
unprocessedObjects.ForEach(p => p.DoNotSendUpdate = false);
|
||||||
_playerChangedCts?.Cancel();
|
_playerChangedCts?.Cancel();
|
||||||
_playerChangedCts = new CancellationTokenSource();
|
_playerChangedCts = new CancellationTokenSource();
|
||||||
var token = _playerChangedCts.Token;
|
var token = _playerChangedCts.Token;
|
||||||
@@ -195,13 +197,11 @@ namespace MareSynchronos.Managers
|
|||||||
LastCreatedCharacterData = cacheDto;
|
LastCreatedCharacterData = cacheDto;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_apiController.IsConnected && !token.IsCancellationRequested && !unprocessedObjects.All(c => c.DoNotSendUpdate))
|
if (_apiController.IsConnected && !token.IsCancellationRequested && !doNotSendUpdate)
|
||||||
{
|
{
|
||||||
Logger.Verbose("Invoking PlayerHasChanged");
|
Logger.Verbose("Invoking PlayerHasChanged");
|
||||||
PlayerHasChanged?.Invoke(cacheDto);
|
PlayerHasChanged?.Invoke(cacheDto);
|
||||||
}
|
}
|
||||||
|
|
||||||
unprocessedObjects.ForEach(p => p.DoNotSendUpdate = false);
|
|
||||||
}, token);
|
}, token);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<Authors></Authors>
|
<Authors></Authors>
|
||||||
<Company></Company>
|
<Company></Company>
|
||||||
<Version>0.2.5.0</Version>
|
<Version>0.2.6.0</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>
|
||||||
|
|||||||
@@ -77,6 +77,7 @@ namespace MareSynchronos.Models
|
|||||||
private unsafe bool CompareAndUpdateByteData(byte* equipSlotData, byte* customizeData)
|
private unsafe bool CompareAndUpdateByteData(byte* equipSlotData, byte* customizeData)
|
||||||
{
|
{
|
||||||
bool hasChanges = false;
|
bool hasChanges = false;
|
||||||
|
DoNotSendUpdate = false;
|
||||||
for (int i = 0; i < EquipSlotData.Length; i++)
|
for (int i = 0; i < EquipSlotData.Length; i++)
|
||||||
{
|
{
|
||||||
var data = Marshal.ReadByte((IntPtr)equipSlotData, i);
|
var data = Marshal.ReadByte((IntPtr)equipSlotData, i);
|
||||||
@@ -103,14 +104,22 @@ namespace MareSynchronos.Models
|
|||||||
var newWeaponOrVisorState = Marshal.ReadByte((IntPtr)customizeData + 31, 0);
|
var newWeaponOrVisorState = Marshal.ReadByte((IntPtr)customizeData + 31, 0);
|
||||||
if (newHatState != HatState)
|
if (newHatState != HatState)
|
||||||
{
|
{
|
||||||
if (HatState != null && !hasChanges) DoNotSendUpdate = true;
|
if (HatState != null && !hasChanges)
|
||||||
|
{
|
||||||
|
Logger.Verbose("Not Sending Update, only Hat changed");
|
||||||
|
DoNotSendUpdate = true;
|
||||||
|
}
|
||||||
HatState = newHatState;
|
HatState = newHatState;
|
||||||
hasChanges = true;
|
hasChanges = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (newWeaponOrVisorState != VisorWeaponState)
|
if (newWeaponOrVisorState != VisorWeaponState)
|
||||||
{
|
{
|
||||||
if (VisorWeaponState != null && !hasChanges) DoNotSendUpdate = true;
|
if (VisorWeaponState != null && !hasChanges)
|
||||||
|
{
|
||||||
|
Logger.Verbose("Not Sending Update, only Visor/Weapon changed");
|
||||||
|
DoNotSendUpdate = true;
|
||||||
|
}
|
||||||
VisorWeaponState = newWeaponOrVisorState;
|
VisorWeaponState = newWeaponOrVisorState;
|
||||||
hasChanges = true;
|
hasChanges = true;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user