Automatic dependency resolution

- All managers now use automatic dependency resolution
This commit is contained in:
Westin Miller
2017-08-17 18:14:23 -07:00
parent dbd98a09c5
commit 6b9af71967
7 changed files with 38 additions and 15 deletions

View File

@@ -25,6 +25,8 @@ namespace Torch.Server.Managers
private const string CONFIG_NAME = "SpaceEngineers-Dedicated.cfg"; private const string CONFIG_NAME = "SpaceEngineers-Dedicated.cfg";
public ConfigDedicatedViewModel DedicatedConfig { get; set; } public ConfigDedicatedViewModel DedicatedConfig { get; set; }
private static readonly Logger Log = LogManager.GetLogger(nameof(InstanceManager)); private static readonly Logger Log = LogManager.GetLogger(nameof(InstanceManager));
[Dependency]
private FilesystemManager _filesystemManager;
public InstanceManager(ITorchBase torchInstance) : base(torchInstance) public InstanceManager(ITorchBase torchInstance) : base(torchInstance)
{ {
@@ -34,7 +36,7 @@ namespace Torch.Server.Managers
/// <inheritdoc /> /// <inheritdoc />
public override void Init() public override void Init()
{ {
MyFileSystem.ExePath = Path.Combine(Torch.GetManager<FilesystemManager>().TorchDirectory, "DedicatedServer64"); MyFileSystem.ExePath = Path.Combine(_filesystemManager.TorchDirectory, "DedicatedServer64");
MyFileSystem.Init("Content", Torch.Config.InstancePath); MyFileSystem.Init("Content", Torch.Config.InstancePath);
//Initializes saves path. Why this isn't in Init() we may never know. //Initializes saves path. Why this isn't in Init() we may never know.
MyFileSystem.InitUserSpecific(null); MyFileSystem.InitUserSpecific(null);
@@ -46,7 +48,7 @@ namespace Torch.Server.Managers
ValidateInstance(path); ValidateInstance(path);
MyFileSystem.Reset(); MyFileSystem.Reset();
MyFileSystem.ExePath = Path.Combine(Torch.GetManager<FilesystemManager>().TorchDirectory, "DedicatedServer64"); MyFileSystem.ExePath = Path.Combine(_filesystemManager.TorchDirectory, "DedicatedServer64");
MyFileSystem.Init("Content", path); MyFileSystem.Init("Content", path);
//Initializes saves path. Why this isn't in Init() we may never know. //Initializes saves path. Why this isn't in Init() we may never know.
MyFileSystem.InitUserSpecific(null); MyFileSystem.InitUserSpecific(null);

View File

@@ -20,6 +20,8 @@ namespace Torch.Commands
public CommandTree Commands { get; set; } = new CommandTree(); public CommandTree Commands { get; set; } = new CommandTree();
private Logger _log = LogManager.GetLogger(nameof(CommandManager)); private Logger _log = LogManager.GetLogger(nameof(CommandManager));
[Dependency]
private ChatManager _chatManager;
public CommandManager(ITorchBase torch, char prefix = '!') : base(torch) public CommandManager(ITorchBase torch, char prefix = '!') : base(torch)
{ {
@@ -29,7 +31,7 @@ namespace Torch.Commands
public override void Init() public override void Init()
{ {
RegisterCommandModule(typeof(TorchCommands)); RegisterCommandModule(typeof(TorchCommands));
Torch.GetManager<ChatManager>().MessageRecieved += HandleCommand; _chatManager.MessageRecieved += HandleCommand;
} }
public bool HasPermission(ulong steamId, Command command) public bool HasPermission(ulong steamId, Command command)

View File

@@ -27,6 +27,9 @@ namespace Torch.Managers
internal void RaiseMessageRecieved(ChatMsg msg, ref bool sendToOthers) => internal void RaiseMessageRecieved(ChatMsg msg, ref bool sendToOthers) =>
MessageRecieved?.Invoke(msg, ref sendToOthers); MessageRecieved?.Invoke(msg, ref sendToOthers);
[Dependency]
private INetworkManager _networkManager;
public ChatManager(ITorchBase torchInstance) : base(torchInstance) public ChatManager(ITorchBase torchInstance) : base(torchInstance)
{ {
@@ -36,7 +39,7 @@ namespace Torch.Managers
{ {
try try
{ {
Torch.GetManager<INetworkManager>().RegisterNetworkHandler(new ChatIntercept(this)); _networkManager.RegisterNetworkHandler(new ChatIntercept(this));
} }
catch catch
{ {

View File

@@ -176,6 +176,16 @@ namespace Torch.Managers
// tmpQueue.Sort(); If we have priorities this is where to sort them. // tmpQueue.Sort(); If we have priorities this is where to sort them.
_orderedManagers.AddRange(tmpQueue); _orderedManagers.AddRange(tmpQueue);
} }
_log.Debug("Dependency tree satisfied. Load order is:");
foreach (ManagerInstance manager in _orderedManagers)
{
_log.Debug(" - {0}", manager.Instance.GetType().FullName);
_log.Debug(" - Dependencies: {0}",
string.Join(", ", manager.Dependencies.Select(x => x.DependencyType.Name + (x.Optional ? " (Optional)" : ""))));
_log.Debug(" - Dependents: {0}",
string.Join(", ", manager.Dependents.Select(x => x.Instance.GetType().Name)));
}
#endregion #endregion
// Updates the dependency fields with the correct manager instances // Updates the dependency fields with the correct manager instances
@@ -184,7 +194,7 @@ namespace Torch.Managers
{ {
manager.Dependents.Clear(); manager.Dependents.Clear();
foreach (DependencyInfo dependency in manager.Dependencies) foreach (DependencyInfo dependency in manager.Dependencies)
dependency.Field.SetValue(manager.Instance, _dependencySatisfaction.GetValueOrDefault(dependency.DependencyType)); dependency.Field.SetValue(manager.Instance, _dependencySatisfaction.GetValueOrDefault(dependency.DependencyType)?.Instance);
} }
#endregion #endregion
} }

View File

@@ -52,6 +52,13 @@ namespace Torch.Managers
private static readonly Logger ChatLog = LogManager.GetLogger("Chat"); private static readonly Logger ChatLog = LogManager.GetLogger("Chat");
private Dictionary<MyPlayer.PlayerId, MyPlayer> _onlinePlayers; private Dictionary<MyPlayer.PlayerId, MyPlayer> _onlinePlayers;
[Dependency]
private ChatManager _chatManager;
[Dependency]
private CommandManager _commandManager;
[Dependency]
private NetworkManager _networkManager;
internal MultiplayerManager(ITorchBase torch) : base(torch) internal MultiplayerManager(ITorchBase torch) : base(torch)
{ {
@@ -61,7 +68,7 @@ namespace Torch.Managers
public override void Init() public override void Init()
{ {
Torch.SessionLoaded += OnSessionLoaded; Torch.SessionLoaded += OnSessionLoaded;
Torch.GetManager<ChatManager>().MessageRecieved += Instance_MessageRecieved; _chatManager.MessageRecieved += Instance_MessageRecieved;
} }
private void Instance_MessageRecieved(ChatMsg msg, ref bool sendToOthers) private void Instance_MessageRecieved(ChatMsg msg, ref bool sendToOthers)
@@ -125,10 +132,9 @@ namespace Torch.Managers
return; return;
ChatHistory.Add(new ChatMessage(DateTime.Now, 0, author, message)); ChatHistory.Add(new ChatMessage(DateTime.Now, 0, author, message));
var commands = Torch.GetManager<CommandManager>(); if (_commandManager.IsCommand(message))
if (commands.IsCommand(message))
{ {
var response = commands.HandleCommandFromServer(message); var response = _commandManager.HandleCommandFromServer(message);
ChatHistory.Add(new ChatMessage(DateTime.Now, 0, author, response)); ChatHistory.Add(new ChatMessage(DateTime.Now, 0, author, response));
} }
else else
@@ -141,7 +147,7 @@ namespace Torch.Managers
return; return;
var addToGlobalHistoryMethod = typeof(MyCharacter).GetMethod("OnGlobalMessageSuccess", BindingFlags.Instance | BindingFlags.NonPublic); var addToGlobalHistoryMethod = typeof(MyCharacter).GetMethod("OnGlobalMessageSuccess", BindingFlags.Instance | BindingFlags.NonPublic);
Torch.GetManager<NetworkManager>().RaiseEvent(addToGlobalHistoryMethod, character, steamId, steamId, message); _networkManager.RaiseEvent(addToGlobalHistoryMethod, character, steamId, steamId, message);
} }
} }

View File

@@ -20,7 +20,10 @@ namespace Torch.Managers
{ {
private static Logger _log = LogManager.GetLogger(nameof(PluginManager)); private static Logger _log = LogManager.GetLogger(nameof(PluginManager));
public readonly string PluginDir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Plugins"); public readonly string PluginDir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Plugins");
[Dependency]
private UpdateManager _updateManager; private UpdateManager _updateManager;
[Dependency]
private CommandManager _commandManager;
/// <inheritdoc /> /// <inheritdoc />
public IList<ITorchPlugin> Plugins { get; } = new ObservableList<ITorchPlugin>(); public IList<ITorchPlugin> Plugins { get; } = new ObservableList<ITorchPlugin>();
@@ -87,9 +90,6 @@ namespace Torch.Managers
/// <inheritdoc /> /// <inheritdoc />
public void LoadPlugins() public void LoadPlugins()
{ {
_updateManager = Torch.GetManager<UpdateManager>();
var commands = Torch.GetManager<CommandManager>();
if (Torch.Config.ShouldUpdatePlugins) if (Torch.Config.ShouldUpdatePlugins)
DownloadPlugins(); DownloadPlugins();
else else
@@ -119,7 +119,7 @@ namespace Torch.Managers
plugin.StoragePath = Torch.Config.InstancePath; plugin.StoragePath = Torch.Config.InstancePath;
Plugins.Add(plugin); Plugins.Add(plugin);
commands.RegisterPluginCommands(plugin); _commandManager.RegisterPluginCommands(plugin);
} }
catch (Exception e) catch (Exception e)
{ {

View File

@@ -25,6 +25,7 @@ namespace Torch.Managers
private GitHubClient _gitClient = new GitHubClient(new ProductHeaderValue("Torch")); private GitHubClient _gitClient = new GitHubClient(new ProductHeaderValue("Torch"));
private string _torchDir = new FileInfo(typeof(UpdateManager).Assembly.Location).DirectoryName; private string _torchDir = new FileInfo(typeof(UpdateManager).Assembly.Location).DirectoryName;
private Logger _log = LogManager.GetLogger(nameof(UpdateManager)); private Logger _log = LogManager.GetLogger(nameof(UpdateManager));
[Dependency]
private FilesystemManager _fsManager; private FilesystemManager _fsManager;
public UpdateManager(ITorchBase torchInstance) : base(torchInstance) public UpdateManager(ITorchBase torchInstance) : base(torchInstance)
@@ -35,7 +36,6 @@ namespace Torch.Managers
/// <inheritdoc /> /// <inheritdoc />
public override void Init() public override void Init()
{ {
_fsManager = Torch.GetManager<FilesystemManager>();
CheckAndUpdateTorch(); CheckAndUpdateTorch();
} }