fix issue on not reloading player on zone switch, minor cleanup

This commit is contained in:
Stanley Dimant
2022-06-26 17:42:14 +02:00
parent 9aaab87c91
commit b42de9a8a7
4 changed files with 22 additions and 28 deletions

View File

@@ -1,6 +1,5 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics;
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using Dalamud.Game; using Dalamud.Game;
@@ -155,12 +154,11 @@ public class CachedPlayersManager : IDisposable
private void FrameworkOnUpdate(Framework framework) private void FrameworkOnUpdate(Framework framework)
{ {
if (_clientState.LocalPlayer == null) return; if (!_dalamudUtil.IsPlayerPresent || !_ipcManager.Initialized || !_apiController.IsConnected) return;
if (DateTime.Now < _lastPlayerObjectCheck.AddSeconds(0.25)) return; if (DateTime.Now < _lastPlayerObjectCheck.AddSeconds(0.25)) return;
_localVisiblePlayers.Clear(); _localVisiblePlayers.Clear();
if (!_ipcManager.Initialized) return;
string ownName = _dalamudUtil.PlayerName; string ownName = _dalamudUtil.PlayerName;
var playerCharacters = _objectTable.Where(obj => var playerCharacters = _objectTable.Where(obj =>
obj.ObjectKind == Dalamud.Game.ClientState.Objects.Enums.ObjectKind.Player && obj.ObjectKind == Dalamud.Game.ClientState.Objects.Enums.ObjectKind.Player &&

View File

@@ -1,5 +1,4 @@
using Dalamud.Game.ClientState.Objects; using Dalamud.Logging;
using Dalamud.Logging;
using MareSynchronos.Factories; using MareSynchronos.Factories;
using MareSynchronos.Models; using MareSynchronos.Models;
using MareSynchronos.Utils; using MareSynchronos.Utils;
@@ -21,23 +20,31 @@ namespace MareSynchronos.Managers
private readonly CharacterDataFactory _characterDataFactory; private readonly CharacterDataFactory _characterDataFactory;
private readonly DalamudUtil _dalamudUtil; private readonly DalamudUtil _dalamudUtil;
private readonly IpcManager _ipcManager; private readonly IpcManager _ipcManager;
private readonly ObjectTable _objectTable;
private readonly IPlayerWatcher _watcher; private readonly IPlayerWatcher _watcher;
private string _lastSentHash = string.Empty; private string _lastSentHash = string.Empty;
private Task? _playerChangedTask; private Task? _playerChangedTask;
public PlayerManager(ApiController apiController, ObjectTable objectTable, IpcManager ipcManager, public PlayerManager(ApiController apiController, IpcManager ipcManager,
CharacterDataFactory characterDataFactory, CachedPlayersManager cachedPlayersManager, DalamudUtil dalamudUtil, IPlayerWatcher watcher) CharacterDataFactory characterDataFactory, CachedPlayersManager cachedPlayersManager, DalamudUtil dalamudUtil, IPlayerWatcher watcher)
{ {
Logger.Debug("Creating " + nameof(PlayerManager)); Logger.Debug("Creating " + nameof(PlayerManager));
_apiController = apiController; _apiController = apiController;
_objectTable = objectTable;
_ipcManager = ipcManager; _ipcManager = ipcManager;
_characterDataFactory = characterDataFactory; _characterDataFactory = characterDataFactory;
_cachedPlayersManager = cachedPlayersManager; _cachedPlayersManager = cachedPlayersManager;
_dalamudUtil = dalamudUtil; _dalamudUtil = dalamudUtil;
_watcher = watcher; _watcher = watcher;
_watcher.AddPlayerToWatch(_dalamudUtil.PlayerName);
_apiController.Connected += ApiController_Connected;
_apiController.Disconnected += ApiController_Disconnected;
Logger.Debug("Watching Player, ApiController is Connected: " + _apiController.IsConnected);
if (_apiController.IsConnected)
{
ApiController_Connected(null, EventArgs.Empty);
}
} }
public void Dispose() public void Dispose()
@@ -50,19 +57,6 @@ namespace MareSynchronos.Managers
_watcher.PlayerChanged -= Watcher_PlayerChanged; _watcher.PlayerChanged -= Watcher_PlayerChanged;
} }
internal void StartWatchingPlayer()
{
_watcher.AddPlayerToWatch(_dalamudUtil.PlayerName);
_apiController.Connected += ApiController_Connected;
_apiController.Disconnected += ApiController_Disconnected;
Logger.Debug("Watching Player, ApiController is Connected: " + _apiController.IsConnected);
if (_apiController.IsConnected)
{
ApiController_Connected(null, EventArgs.Empty);
}
}
private void ApiController_Connected(object? sender, EventArgs args) private void ApiController_Connected(object? sender, EventArgs args)
{ {
Logger.Debug("ApiController Connected"); Logger.Debug("ApiController Connected");

View File

@@ -155,7 +155,9 @@ public class CachedPlayer
{ {
Logger.Debug("Restoring state for " + PlayerName); Logger.Debug("Restoring state for " + PlayerName);
IsVisible = false; IsVisible = false;
_downloadCancellationTokenSource?.Cancel();
_downloadCancellationTokenSource?.Dispose(); _downloadCancellationTokenSource?.Dispose();
_downloadCancellationTokenSource = null;
_watcher.RemovePlayerFromWatch(PlayerName); _watcher.RemovePlayerFromWatch(PlayerName);
_ipcManager.PenumbraRemoveTemporaryCollection(PlayerName); _ipcManager.PenumbraRemoveTemporaryCollection(PlayerName);
_ipcManager.GlamourerRevertCharacterCustomization(PlayerName); _ipcManager.GlamourerRevertCharacterCustomization(PlayerName);

View File

@@ -31,7 +31,7 @@ namespace MareSynchronos
public static DalamudPluginInterface PluginInterface { get; set; } public static DalamudPluginInterface PluginInterface { get; set; }
private readonly PluginUi _pluginUi; private readonly PluginUi _pluginUi;
private readonly WindowSystem _windowSystem; private readonly WindowSystem _windowSystem;
private PlayerManager? _characterManager; private PlayerManager? _playerManager;
private readonly DalamudUtil _dalamudUtil; private readonly DalamudUtil _dalamudUtil;
private CachedPlayersManager? _characterCacheManager; private CachedPlayersManager? _characterCacheManager;
private readonly IPlayerWatcher _playerWatcher; private readonly IPlayerWatcher _playerWatcher;
@@ -90,7 +90,7 @@ namespace MareSynchronos
_pluginUi.IsOpen = false; _pluginUi.IsOpen = false;
_introUi.IsOpen = true; _introUi.IsOpen = true;
_characterCacheManager?.Dispose(); _characterCacheManager?.Dispose();
_characterManager?.Dispose(); _playerManager?.Dispose();
} }
public string Name => "Mare Synchronos"; public string Name => "Mare Synchronos";
@@ -110,7 +110,7 @@ namespace MareSynchronos
_fileCacheManager?.Dispose(); _fileCacheManager?.Dispose();
_ipcManager?.Dispose(); _ipcManager?.Dispose();
_characterManager?.Dispose(); _playerManager?.Dispose();
_characterCacheManager?.Dispose(); _characterCacheManager?.Dispose();
_playerWatcher.Disable(); _playerWatcher.Disable();
_playerWatcher.Dispose(); _playerWatcher.Dispose();
@@ -141,7 +141,7 @@ namespace MareSynchronos
{ {
Logger.Debug("Client logout"); Logger.Debug("Client logout");
_characterCacheManager?.Dispose(); _characterCacheManager?.Dispose();
_characterManager?.Dispose(); _playerManager?.Dispose();
PluginInterface.UiBuilder.Draw -= Draw; PluginInterface.UiBuilder.Draw -= Draw;
PluginInterface.UiBuilder.OpenConfigUi -= OpenConfigUi; PluginInterface.UiBuilder.OpenConfigUi -= OpenConfigUi;
_commandManager.RemoveHandler(CommandName); _commandManager.RemoveHandler(CommandName);
@@ -149,7 +149,8 @@ namespace MareSynchronos
public void ReLaunchCharacterManager() public void ReLaunchCharacterManager()
{ {
_characterManager?.Dispose(); _playerManager?.Dispose();
_characterCacheManager?.Dispose();
Task.Run(async () => Task.Run(async () =>
{ {
@@ -164,9 +165,8 @@ namespace MareSynchronos
new CharacterDataFactory(_dalamudUtil, _ipcManager); new CharacterDataFactory(_dalamudUtil, _ipcManager);
_characterCacheManager = new CachedPlayersManager(_clientState, _framework, _objectTable, _characterCacheManager = new CachedPlayersManager(_clientState, _framework, _objectTable,
_apiController, _dalamudUtil, _ipcManager, _playerWatcher); _apiController, _dalamudUtil, _ipcManager, _playerWatcher);
_characterManager = new PlayerManager(_apiController, _objectTable, _ipcManager, _playerManager = new PlayerManager(_apiController, _ipcManager,
characterCacheFactory, _characterCacheManager, _dalamudUtil, _playerWatcher); characterCacheFactory, _characterCacheManager, _dalamudUtil, _playerWatcher);
_characterManager.StartWatchingPlayer();
} }
catch (Exception ex) catch (Exception ex)
{ {