rework the whole connection garbage/custom servers, other cleanups/refactors

This commit is contained in:
Stanley Dimant
2022-06-27 01:19:45 +02:00
parent 404ba8e278
commit 61b178e2c0
12 changed files with 386 additions and 302 deletions

View File

@@ -4,12 +4,9 @@ using System.Linq;
using System.Threading.Tasks;
using Dalamud.Game;
using Dalamud.Game.ClientState;
using Dalamud.Game.ClientState.Objects;
using Dalamud.Game.ClientState.Objects.SubKinds;
using MareSynchronos.Models;
using MareSynchronos.Utils;
using MareSynchronos.WebAPI;
using Penumbra.PlayerWatch;
namespace MareSynchronos.Managers;
@@ -20,23 +17,20 @@ public class CachedPlayersManager : IDisposable
private readonly DalamudUtil _dalamudUtil;
private readonly Framework _framework;
private readonly IpcManager _ipcManager;
private readonly IPlayerWatcher _watcher;
private readonly ObjectTable _objectTable;
private readonly List<CachedPlayer> _onlineCachedPlayers = new();
private readonly List<string> _localVisiblePlayers = new();
private DateTime _lastPlayerObjectCheck = DateTime.Now;
public CachedPlayersManager(ClientState clientState, Framework framework, ObjectTable objectTable, ApiController apiController, DalamudUtil dalamudUtil, IpcManager ipcManager, IPlayerWatcher watcher)
public CachedPlayersManager(ClientState clientState, Framework framework,
ApiController apiController, DalamudUtil dalamudUtil, IpcManager ipcManager)
{
Logger.Debug("Creating " + nameof(CachedPlayersManager));
_clientState = clientState;
_framework = framework;
_objectTable = objectTable;
_apiController = apiController;
_dalamudUtil = dalamudUtil;
_ipcManager = ipcManager;
_watcher = watcher;
_clientState.Login += ClientStateOnLogin;
_clientState.Logout += ClientStateOnLogout;
@@ -53,7 +47,7 @@ public class CachedPlayersManager : IDisposable
ClientStateOnLogin(null, EventArgs.Empty);
}
}
private void IpcManagerOnPenumbraDisposed(object? sender, EventArgs e)
{
_onlineCachedPlayers.ForEach(p => p.DisposePlayer());
@@ -159,14 +153,10 @@ public class CachedPlayersManager : IDisposable
if (DateTime.Now < _lastPlayerObjectCheck.AddSeconds(0.25)) return;
_localVisiblePlayers.Clear();
string ownName = _dalamudUtil.PlayerName;
var playerCharacters = _objectTable.Where(obj =>
obj.ObjectKind == Dalamud.Game.ClientState.Objects.Enums.ObjectKind.Player &&
obj.Name.ToString() != ownName).ToList();
foreach (var obj in playerCharacters)
var playerCharacters = _dalamudUtil.GetPlayerCharacters();
foreach (var pChar in playerCharacters)
{
var pObj = (PlayerCharacter)obj;
var pObjName = pObj.Name.ToString();
var pObjName = pChar.Name.ToString();
_localVisiblePlayers.Add(pObjName);
var existingCachedPlayer = _onlineCachedPlayers.SingleOrDefault(p => p.PlayerName == pObjName);
if (existingCachedPlayer != null)
@@ -175,8 +165,8 @@ public class CachedPlayersManager : IDisposable
continue;
}
var hashedName = Crypto.GetHash256(pObj.Name.ToString() + pObj.HomeWorld.Id.ToString());
_onlineCachedPlayers.SingleOrDefault(p => p.PlayerNameHash == hashedName)?.InitializePlayer(pObj);
var hashedName = Crypto.GetHash256(pChar);
_onlineCachedPlayers.SingleOrDefault(p => p.PlayerNameHash == hashedName)?.InitializePlayer(pChar);
}
_onlineCachedPlayers.Where(p => !string.IsNullOrEmpty(p.PlayerName) && !_localVisiblePlayers.Contains(p.PlayerName))
@@ -191,6 +181,6 @@ public class CachedPlayersManager : IDisposable
private CachedPlayer CreateCachedPlayer(string hashedName)
{
return new CachedPlayer(hashedName, _ipcManager, _apiController, _dalamudUtil, _watcher);
return new CachedPlayer(hashedName, _ipcManager, _apiController, _dalamudUtil);
}
}

View File

@@ -34,12 +34,10 @@ namespace MareSynchronos.Managers
private void StartWatchersAndScan()
{
if (_ipcManager.Initialized && _pluginConfiguration.HasValidSetup)
{
Logger.Debug("Penumbra is active, configuration is valid, starting watchers and scan");
StartWatchers();
StartInitialScan();
}
if (!_ipcManager.Initialized || !_pluginConfiguration.HasValidSetup) return;
Logger.Debug("Penumbra is active, configuration is valid, starting watchers and scan");
StartWatchers();
StartInitialScan();
}
private void IpcManagerOnPenumbraInitialized(object? sender, EventArgs e)

View File

@@ -146,7 +146,9 @@ namespace MareSynchronos.Managers
{
if (!CheckPenumbraApi()) return string.Empty;
Logger.Debug("Creating temp collection for " + characterName);
return _penumbraCreateTemporaryCollection.InvokeFunc("MareSynchronos", characterName, true).Item2;
var ret = _penumbraCreateTemporaryCollection.InvokeFunc("MareSynchronos", characterName, true);
Logger.Debug("Penumbra ret: " + ret.Item1);
return ret.Item2;
}
public string PenumbraGetMetaManipulations(string characterName)

View File

@@ -4,7 +4,6 @@ using MareSynchronos.Models;
using MareSynchronos.Utils;
using MareSynchronos.WebAPI;
using Newtonsoft.Json;
using Penumbra.PlayerWatch;
using System;
using System.Diagnostics;
using System.Linq;
@@ -20,12 +19,11 @@ namespace MareSynchronos.Managers
private readonly CharacterDataFactory _characterDataFactory;
private readonly DalamudUtil _dalamudUtil;
private readonly IpcManager _ipcManager;
private readonly IPlayerWatcher _watcher;
private string _lastSentHash = string.Empty;
private Task? _playerChangedTask;
public PlayerManager(ApiController apiController, IpcManager ipcManager,
CharacterDataFactory characterDataFactory, CachedPlayersManager cachedPlayersManager, DalamudUtil dalamudUtil, IPlayerWatcher watcher)
CharacterDataFactory characterDataFactory, CachedPlayersManager cachedPlayersManager, DalamudUtil dalamudUtil)
{
Logger.Debug("Creating " + nameof(PlayerManager));
@@ -34,9 +32,8 @@ namespace MareSynchronos.Managers
_characterDataFactory = characterDataFactory;
_cachedPlayersManager = cachedPlayersManager;
_dalamudUtil = dalamudUtil;
_watcher = watcher;
_watcher.AddPlayerToWatch(_dalamudUtil.PlayerName);
_dalamudUtil.AddPlayerToWatch(_dalamudUtil.PlayerName);
_apiController.Connected += ApiController_Connected;
_apiController.Disconnected += ApiController_Disconnected;
@@ -54,7 +51,7 @@ namespace MareSynchronos.Managers
_ipcManager.PenumbraRedrawEvent -= IpcManager_PenumbraRedrawEvent;
_apiController.Connected -= ApiController_Connected;
_apiController.Disconnected -= ApiController_Disconnected;
_watcher.PlayerChanged -= Watcher_PlayerChanged;
_dalamudUtil.PlayerChanged -= Watcher_PlayerChanged;
}
private void ApiController_Connected(object? sender, EventArgs args)
@@ -69,7 +66,7 @@ namespace MareSynchronos.Managers
_ipcManager.PenumbraRedrawEvent += IpcManager_PenumbraRedrawEvent;
_ipcManager.PenumbraRedraw(_dalamudUtil.PlayerName);
_watcher.PlayerChanged += Watcher_PlayerChanged;
_dalamudUtil.PlayerChanged += Watcher_PlayerChanged;
}
private void ApiController_Disconnected(object? sender, EventArgs args)
@@ -77,7 +74,7 @@ namespace MareSynchronos.Managers
Logger.Debug(nameof(ApiController_Disconnected));
_ipcManager.PenumbraRedrawEvent -= IpcManager_PenumbraRedrawEvent;
_watcher.PlayerChanged -= Watcher_PlayerChanged;
_dalamudUtil.PlayerChanged -= Watcher_PlayerChanged;
}
private async Task<CharacterData> CreateFullCharacterCache()