Loggerrework (#45)

* test some refactoring for cachedplayer

* rework logging

* fix saving of log level

---------

Co-authored-by: rootdarkarchon <root.darkarchon@outlook.com>
This commit is contained in:
rootdarkarchon
2023-02-18 15:23:38 +01:00
committed by GitHub
parent 7f36e80e2a
commit 2ae5d42e4d
49 changed files with 676 additions and 691 deletions

View File

@@ -2,10 +2,10 @@
using FFXIVClientStructs.FFXIV.Client.Game.Object;
using FFXIVClientStructs.FFXIV.Client.Graphics.Scene;
using System.Runtime.InteropServices;
using MareSynchronos.Utils;
using Penumbra.String;
using MareSynchronos.Mediator;
using ObjectKind = MareSynchronos.API.Data.Enum.ObjectKind;
using Microsoft.Extensions.Logging;
namespace MareSynchronos.Models;
@@ -27,23 +27,10 @@ public class GameObjectHandler : MediatorSubscriberBase
public override string ToString()
{
return $"{Name} (Addr: {Address.ToString("X")}, DrawObj: {DrawObjectAddress.ToString("X")})";
return $"{Name} ({Address.ToString("X")},{DrawObjectAddress.ToString("X")})";
}
private IntPtr CurrentAddress
{
get
{
try
{
return _getAddress.Invoke();
}
catch
{ return IntPtr.Zero; }
}
}
public GameObjectHandler(MareMediator mediator, ObjectKind objectKind, Func<IntPtr> getAddress, bool watchedObject = true) : base(mediator)
public GameObjectHandler(ILogger<GameObjectHandler> logger, MareMediator mediator, ObjectKind objectKind, Func<IntPtr> getAddress, bool watchedObject = true) : base(logger, mediator)
{
_mediator = mediator;
ObjectKind = objectKind;
@@ -97,10 +84,9 @@ public class GameObjectHandler : MediatorSubscriberBase
private void FrameworkUpdate()
{
if (_delayedZoningTask?.IsCompleted ?? true)
{
CheckAndUpdateObject();
}
if (!_delayedZoningTask?.IsCompleted ?? false) return;
CheckAndUpdateObject();
}
private void ZoneSwitchEnd()
@@ -118,7 +104,7 @@ public class GameObjectHandler : MediatorSubscriberBase
if (!_sendUpdates || _haltProcessing) return;
_zoningCts = new();
Logger.Debug("Starting Delay After Zoning for " + ObjectKind + " " + Name);
_logger.LogDebug($"[{this}] Starting Delay After Zoning");
_delayedZoningTask = Task.Run(async () =>
{
try
@@ -128,7 +114,7 @@ public class GameObjectHandler : MediatorSubscriberBase
catch { }
finally
{
Logger.Debug("Delay complete for " + ObjectKind);
_logger.LogDebug($"[{this}] Delay after zoning complete");
_zoningCts.Dispose();
}
});
@@ -145,12 +131,12 @@ public class GameObjectHandler : MediatorSubscriberBase
private unsafe void CheckAndUpdateObject()
{
var curPtr = CurrentAddress;
bool drawObj = false;
var curPtr = _getAddress.Invoke();
bool drawObjDiff = false;
try
{
var drawObjAddr = (IntPtr)((GameObject*)curPtr)->GetDrawObject();
drawObj = drawObjAddr != DrawObjectAddress;
drawObjDiff = drawObjAddr != DrawObjectAddress;
DrawObjectAddress = drawObjAddr;
IsBeingDrawn = (((CharacterBase*)drawObjAddr)->HasModelInSlotLoaded != 0)
@@ -159,7 +145,10 @@ public class GameObjectHandler : MediatorSubscriberBase
}
catch
{
IsBeingDrawn = true;
if (curPtr != IntPtr.Zero)
{
IsBeingDrawn = true;
}
}
if (_haltProcessing) return;
@@ -168,30 +157,29 @@ public class GameObjectHandler : MediatorSubscriberBase
{
if (_clearCts != null)
{
Logger.Debug("Cancelling Clear Task for " + ObjectKind + " " + Name);
_logger.LogDebug($"[{this}] Cancelling Clear Task");
_clearCts?.Cancel();
_clearCts = null;
}
bool addrDiff = Address != curPtr;
Address = curPtr;
var chara = (Character*)curPtr;
bool addr = Address == IntPtr.Zero || Address != curPtr;
bool equip = CompareAndUpdateEquipByteData(chara->EquipSlotData);
var customize = CompareAndUpdateCustomizeData(chara->CustomizeData);
bool equipDiff = CompareAndUpdateEquipByteData(chara->EquipSlotData);
var customizeDiff = _sendUpdates ? CompareAndUpdateCustomizeData(chara->CustomizeData) : false;
var name = new ByteString(chara->GameObject.Name).ToString();
bool nameChange = (!string.Equals(name, Name, StringComparison.Ordinal));
if (addr || equip || customize || drawObj || nameChange)
if (addrDiff || equipDiff || customizeDiff || drawObjDiff || nameChange)
{
Name = name;
Logger.Verbose($"{ObjectKind} changed: {Name}, now: {curPtr:X}, {(IntPtr)chara->GameObject.DrawObject:X}");
_logger.LogTrace($"[{this}] Changed");
Address = curPtr;
DrawObjectAddress = (IntPtr)chara->GameObject.DrawObject;
if (_sendUpdates && !_doNotSendUpdate && DrawObjectAddress != IntPtr.Zero)
if (_sendUpdates && !_doNotSendUpdate)
{
Logger.Debug("Sending CreateCacheObjectMessage for " + ObjectKind);
_logger.LogDebug($"[{this}] Sending CreateCacheObjectMessage");
Mediator.Publish(new CreateCacheForObjectMessage(this));
}
if (equip)
if (equipDiff && !_sendUpdates)
{
Mediator.Publish(new CharacterChangedMessage(this));
}
@@ -201,7 +189,7 @@ public class GameObjectHandler : MediatorSubscriberBase
{
Address = IntPtr.Zero;
DrawObjectAddress = IntPtr.Zero;
Logger.Verbose(ObjectKind + " Changed, DrawObj Zero: " + Name + ", now: " + Address + ", " + DrawObjectAddress);
_logger.LogTrace($"[{this}] Changed -> Null");
if (_sendUpdates && ObjectKind != ObjectKind.Player)
{
_clearCts?.Cancel();
@@ -215,9 +203,9 @@ public class GameObjectHandler : MediatorSubscriberBase
private async Task ClearTask(CancellationToken token)
{
Logger.Debug("Running Clear Task for " + ObjectKind);
_logger.LogDebug($"[{this}] Running Clear Task");
await Task.Delay(TimeSpan.FromSeconds(1), token).ConfigureAwait(false);
Logger.Debug("Sending ClearCachedForObjectMessage for " + ObjectKind);
_logger.LogDebug($"[{this}] Sending ClearCachedForObjectMessage");
Mediator.Publish(new ClearCacheForObjectMessage(this));
_clearCts = null;
}
@@ -237,6 +225,7 @@ public class GameObjectHandler : MediatorSubscriberBase
return hasChanges;
}
private unsafe bool CompareAndUpdateCustomizeData(byte* customizeData)
{
bool hasChanges = false;
@@ -258,7 +247,7 @@ public class GameObjectHandler : MediatorSubscriberBase
{
if (HatState != null && !hasChanges)
{
Logger.Debug("Not Sending Update, only Hat changed");
_logger.LogDebug($"[{this}] Not Sending Update, only Hat changed");
_doNotSendUpdate = true;
}
HatState = newHatState;
@@ -270,7 +259,7 @@ public class GameObjectHandler : MediatorSubscriberBase
{
if (VisorWeaponState != null && !hasChanges)
{
Logger.Debug("Not Sending Update, only Visor/Weapon changed");
_logger.LogDebug($"[{this}] Not Sending Update, only Visor/Weapon changed");
_doNotSendUpdate = true;
}
VisorWeaponState = newWeaponOrVisorState;

View File

@@ -7,17 +7,20 @@ using MareSynchronos.API.Dto.User;
using MareSynchronos.Managers;
using MareSynchronos.MareConfiguration;
using MareSynchronos.Utils;
using Microsoft.Extensions.Logging;
namespace MareSynchronos.Models;
public class Pair
{
private readonly ILogger<Pair> _logger;
private readonly MareConfigService _configService;
private readonly ServerConfigurationManager _serverConfigurationManager;
private OptionalPluginWarning? _pluginWarnings;
public Pair(MareConfigService configService, ServerConfigurationManager serverConfigurationManager)
public Pair(ILogger<Pair> logger, MareConfigService configService, ServerConfigurationManager serverConfigurationManager)
{
_logger = logger;
_configService = configService;
_serverConfigurationManager = serverConfigurationManager;
}
@@ -96,10 +99,10 @@ public class Pair
private API.Data.CharacterData? RemoveNotSyncedFiles(API.Data.CharacterData? data)
{
Logger.Verbose("Removing not synced files");
_logger.LogTrace("Removing not synced files");
if (data == null || (UserPair != null && UserPair.OtherPermissions.IsPaired()))
{
Logger.Verbose("Nothing to remove or user is paired directly");
_logger.LogTrace("Nothing to remove or user is paired directly");
return data;
}
@@ -114,7 +117,7 @@ public class Pair
if (disableAnimations || disableSounds)
{
Logger.Verbose($"Data cleaned up: Animations disabled: {disableAnimations}, Sounds disabled: {disableSounds}");
_logger.LogTrace($"Data cleaned up: Animations disabled: {disableAnimations}, Sounds disabled: {disableSounds}");
foreach (var kvp in data.FileReplacements)
{
if (disableSounds)