refactor a little bit

This commit is contained in:
rootdarkarchon
2024-02-29 01:16:01 +01:00
committed by Loporrit
parent 6ab9812f9a
commit dd878e6e36
21 changed files with 1122 additions and 923 deletions

View File

@@ -0,0 +1,51 @@
using Dalamud.Game.ClientState.Objects.Types;
using MareSynchronos.PlayerData.Handlers;
using MareSynchronos.Services;
using MareSynchronos.Services.Mediator;
using MareSynchronos.Utils;
using Microsoft.Extensions.Logging;
namespace MareSynchronos.Interop.Ipc;
public class RedrawManager
{
private readonly MareMediator _mareMediator;
private readonly DalamudUtilService _dalamudUtil;
private readonly Dictionary<nint, bool> _penumbraRedrawRequests = [];
private CancellationTokenSource _disposalCts = new();
public SemaphoreSlim RedrawSemaphore { get; init; } = new(2, 2);
public RedrawManager(MareMediator mareMediator, DalamudUtilService dalamudUtil)
{
_mareMediator = mareMediator;
_dalamudUtil = dalamudUtil;
}
public async Task PenumbraRedrawInternalAsync(ILogger logger, GameObjectHandler handler, Guid applicationId, Action<ICharacter> action)
{
_mareMediator.Publish(new PenumbraStartRedrawMessage(handler.Address));
_penumbraRedrawRequests[handler.Address] = true;
try
{
CancellationTokenSource cancelToken = new CancellationTokenSource();
cancelToken.CancelAfter(TimeSpan.FromSeconds(15));
await handler.ActOnFrameworkAfterEnsureNoDrawAsync(action, cancelToken.Token).ConfigureAwait(false);
if (!_disposalCts.Token.IsCancellationRequested)
await _dalamudUtil.WaitWhileCharacterIsDrawing(logger, handler, applicationId, 30000, _disposalCts.Token).ConfigureAwait(false);
}
finally
{
_penumbraRedrawRequests[handler.Address] = false;
_mareMediator.Publish(new PenumbraEndRedrawMessage(handler.Address));
}
}
internal void Cancel()
{
_disposalCts = _disposalCts.CancelRecreate();
}
}