This commit is contained in:
Stanley Dimant
2022-07-24 14:44:36 +02:00
parent af7dd239aa
commit e31c232f79
7 changed files with 24 additions and 43 deletions

View File

@@ -11,7 +11,6 @@ using MareSynchronos.FileCacheDB;
using MareSynchronos.Interop;
using MareSynchronos.Utils;
using MareSynchronos.WebAPI;
using Penumbra.GameData.ByteString;
using Penumbra.GameData.Structs;
namespace MareSynchronos.Managers;

View File

@@ -254,7 +254,7 @@ public class OnlinePlayerManager : IDisposable
{
Task.Run(async () =>
{
await _apiController.PushCharacterData(_playerManager.LastCreatedCharacterData!,
await _apiController.PushCharacterData(_playerManager.LastCreatedCharacterData,
visiblePlayers);
});
}

View File

@@ -31,7 +31,7 @@ namespace MareSynchronos.Managers
private DateTime _lastPlayerObjectCheck;
private CharacterEquipment? _currentCharacterEquipment = new();
private List<PlayerOrRelatedObject> playerAttachedObjects = new List<PlayerOrRelatedObject>();
private List<PlayerRelatedObject> playerRelatedObjects = new List<PlayerRelatedObject>();
public unsafe PlayerManager(ApiController apiController, IpcManager ipcManager,
CharacterDataFactory characterDataFactory, DalamudUtil dalamudUtil)
@@ -53,13 +53,13 @@ namespace MareSynchronos.Managers
ApiControllerOnConnected();
}
playerAttachedObjects = new List<PlayerOrRelatedObject>()
playerRelatedObjects = new List<PlayerRelatedObject>()
{
new PlayerOrRelatedObject(ObjectKind.Player, IntPtr.Zero, IntPtr.Zero, () => _dalamudUtil.PlayerPointer),
new PlayerOrRelatedObject(ObjectKind.Minion, IntPtr.Zero, IntPtr.Zero, () => (IntPtr)((Character*)_dalamudUtil.PlayerPointer)->CompanionObject),
new PlayerOrRelatedObject(ObjectKind.Pet, IntPtr.Zero, IntPtr.Zero, () => _dalamudUtil.GetPet()),
new PlayerOrRelatedObject(ObjectKind.Companion, IntPtr.Zero, IntPtr.Zero, () => _dalamudUtil.GetCompanion()),
new PlayerOrRelatedObject(ObjectKind.Mount, IntPtr.Zero, IntPtr.Zero, () => (IntPtr)((CharaExt*)_dalamudUtil.PlayerPointer)->Mount),
new PlayerRelatedObject(ObjectKind.Player, IntPtr.Zero, IntPtr.Zero, () => _dalamudUtil.PlayerPointer),
new PlayerRelatedObject(ObjectKind.Minion, IntPtr.Zero, IntPtr.Zero, () => (IntPtr)((Character*)_dalamudUtil.PlayerPointer)->CompanionObject),
new PlayerRelatedObject(ObjectKind.Pet, IntPtr.Zero, IntPtr.Zero, () => _dalamudUtil.GetPet()),
new PlayerRelatedObject(ObjectKind.Companion, IntPtr.Zero, IntPtr.Zero, () => _dalamudUtil.GetCompanion()),
new PlayerRelatedObject(ObjectKind.Mount, IntPtr.Zero, IntPtr.Zero, () => (IntPtr)((CharaExt*)_dalamudUtil.PlayerPointer)->Mount),
};
}
@@ -80,8 +80,8 @@ namespace MareSynchronos.Managers
if (DateTime.Now < _lastPlayerObjectCheck.AddSeconds(0.25)) return;
playerAttachedObjects.ForEach(k => k.CheckAndUpdateObject());
if (playerAttachedObjects.Any(c => c.HasUnprocessedUpdate && !c.IsProcessing))
playerRelatedObjects.ForEach(k => k.CheckAndUpdateObject());
if (playerRelatedObjects.Any(c => c.HasUnprocessedUpdate && !c.IsProcessing))
{
OnPlayerOrAttachedObjectsChanged();
}
@@ -105,7 +105,7 @@ namespace MareSynchronos.Managers
private async Task<CharacterCacheDto?> CreateFullCharacterCacheDto(CancellationToken token)
{
foreach (var unprocessedObject in playerAttachedObjects.Where(c => c.HasUnprocessedUpdate).ToList())
foreach (var unprocessedObject in playerRelatedObjects.Where(c => c.HasUnprocessedUpdate).ToList())
{
Logger.Verbose("Building Cache for " + unprocessedObject.ObjectKind);
PermanentDataCache = _characterDataFactory.BuildCharacterData(PermanentDataCache, unprocessedObject.ObjectKind, unprocessedObject.Address);
@@ -130,7 +130,7 @@ namespace MareSynchronos.Managers
{
Logger.Verbose("RedrawEvent for addr " + address);
foreach (var item in playerAttachedObjects)
foreach (var item in playerRelatedObjects)
{
if (address == item.Address)
{
@@ -139,7 +139,7 @@ namespace MareSynchronos.Managers
}
}
if (playerAttachedObjects.Any(c => c.HasUnprocessedUpdate))
if (playerRelatedObjects.Any(c => c.HasUnprocessedUpdate))
{
OnPlayerOrAttachedObjectsChanged();
}
@@ -149,7 +149,7 @@ namespace MareSynchronos.Managers
{
if (_dalamudUtil.IsInGpose) return;
var unprocessedObjects = playerAttachedObjects.Where(c => c.HasUnprocessedUpdate);
var unprocessedObjects = playerRelatedObjects.Where(c => c.HasUnprocessedUpdate);
foreach (var unprocessedObject in unprocessedObjects)
{
unprocessedObject.IsProcessing = true;

View File

@@ -7,7 +7,7 @@ using Penumbra.GameData.ByteString;
namespace MareSynchronos.Models
{
internal class PlayerOrRelatedObject
internal class PlayerRelatedObject
{
private readonly Func<IntPtr> getAddress;
@@ -21,7 +21,7 @@ namespace MareSynchronos.Models
private IntPtr CurrentAddress => getAddress.Invoke();
public PlayerOrRelatedObject(ObjectKind objectKind, IntPtr address, IntPtr drawObjectAddress, Func<IntPtr> getAddress)
public PlayerRelatedObject(ObjectKind objectKind, IntPtr address, IntPtr drawObjectAddress, Func<IntPtr> getAddress)
{
ObjectKind = objectKind;
Address = address;

View File

@@ -114,18 +114,6 @@ namespace MareSynchronos.Utils
return (Dalamud.Game.ClientState.Objects.Types.Character)objTableObj;
}
internal unsafe int GetIdxBasedOnPtr(FFXIVClientStructs.FFXIV.Client.Game.Character.Character* pet)
{
var idx = 0;
foreach (var item in _objectTable)
{
if (item.Address == (IntPtr)pet) return idx;
idx++;
}
return -1;
}
public PlayerCharacter? GetPlayerCharacterFromObjectTableByName(string characterName)
{
foreach (var item in _objectTable)
@@ -137,12 +125,6 @@ namespace MareSynchronos.Utils
return null;
}
public unsafe void DebugPrintRenderFlags(IntPtr characterAddress)
{
var obj = (GameObject*)characterAddress;
Logger.Verbose("RenderFlags for " + characterAddress + ": " + Convert.ToString(obj->RenderFlags, 2));
}
public unsafe void WaitWhileCharacterIsDrawing(IntPtr characterAddress, CancellationToken? ct = null)
{
if (!_clientState.IsLoggedIn) return;

View File

@@ -19,10 +19,10 @@ namespace MareSynchronos.WebAPI
private int _downloadId = 0;
public void CancelUpload()
{
if (_uploadToken != null)
if (_uploadCancellationTokenSource != null)
{
Logger.Debug("Cancelling upload");
_uploadToken?.Cancel();
_uploadCancellationTokenSource?.Cancel();
_mareHub!.SendAsync(Api.SendFileAbortUpload);
CurrentUploads.Clear();
}
@@ -123,8 +123,8 @@ namespace MareSynchronos.WebAPI
Logger.Debug("Sending Character data to service " + ApiUri);
CancelUpload();
_uploadToken = new CancellationTokenSource();
var uploadToken = _uploadToken.Token;
_uploadCancellationTokenSource = new CancellationTokenSource();
var uploadToken = _uploadCancellationTokenSource.Token;
Logger.Verbose("New Token Created");
var filesToUpload = await _mareHub!.InvokeAsync<List<UploadFileDto>>(Api.InvokeFileSendFiles, character.FileReplacements.SelectMany(c => c.Value.Select(v => v.Hash)).Distinct(), uploadToken);
@@ -204,7 +204,7 @@ namespace MareSynchronos.WebAPI
}
Logger.Verbose("Upload complete for " + character.GetHashCode());
_uploadToken = null;
_uploadCancellationTokenSource = null;
}
private async Task<(string, byte[])> GetCompressedFileData(string fileHash, CancellationToken uploadToken)

View File

@@ -37,7 +37,7 @@ namespace MareSynchronos.WebAPI
private HubConnection? _mareHub;
private CancellationTokenSource? _uploadToken = new();
private CancellationTokenSource? _uploadCancellationTokenSource = new();
private ConnectionDto? _connectionDto;
public SystemInfoDto SystemInfoDto { get; private set; } = new();
@@ -268,7 +268,7 @@ namespace MareSynchronos.WebAPI
{
CurrentUploads.Clear();
CurrentDownloads.Clear();
_uploadToken?.Cancel();
_uploadCancellationTokenSource?.Cancel();
Logger.Debug("Connection closed");
Disconnected?.Invoke();
return Task.CompletedTask;
@@ -286,7 +286,7 @@ namespace MareSynchronos.WebAPI
{
CurrentUploads.Clear();
CurrentDownloads.Clear();
_uploadToken?.Cancel();
_uploadCancellationTokenSource?.Cancel();
Logger.Debug("Connection closed... Reconnecting");
Disconnected?.Invoke();
return Task.CompletedTask;