diff --git a/Torch.Server/Managers/InstanceManager.cs b/Torch.Server/Managers/InstanceManager.cs index 11a689e..853f28b 100644 --- a/Torch.Server/Managers/InstanceManager.cs +++ b/Torch.Server/Managers/InstanceManager.cs @@ -25,6 +25,8 @@ namespace Torch.Server.Managers private const string CONFIG_NAME = "SpaceEngineers-Dedicated.cfg"; public ConfigDedicatedViewModel DedicatedConfig { get; set; } private static readonly Logger Log = LogManager.GetLogger(nameof(InstanceManager)); + [Dependency] + private FilesystemManager _filesystemManager; public InstanceManager(ITorchBase torchInstance) : base(torchInstance) { @@ -34,7 +36,7 @@ namespace Torch.Server.Managers /// public override void Init() { - MyFileSystem.ExePath = Path.Combine(Torch.GetManager().TorchDirectory, "DedicatedServer64"); + MyFileSystem.ExePath = Path.Combine(_filesystemManager.TorchDirectory, "DedicatedServer64"); MyFileSystem.Init("Content", Torch.Config.InstancePath); //Initializes saves path. Why this isn't in Init() we may never know. MyFileSystem.InitUserSpecific(null); @@ -46,7 +48,7 @@ namespace Torch.Server.Managers ValidateInstance(path); MyFileSystem.Reset(); - MyFileSystem.ExePath = Path.Combine(Torch.GetManager().TorchDirectory, "DedicatedServer64"); + MyFileSystem.ExePath = Path.Combine(_filesystemManager.TorchDirectory, "DedicatedServer64"); MyFileSystem.Init("Content", path); //Initializes saves path. Why this isn't in Init() we may never know. MyFileSystem.InitUserSpecific(null); diff --git a/Torch/Commands/CommandManager.cs b/Torch/Commands/CommandManager.cs index dd67c88..2285879 100644 --- a/Torch/Commands/CommandManager.cs +++ b/Torch/Commands/CommandManager.cs @@ -20,6 +20,8 @@ namespace Torch.Commands public CommandTree Commands { get; set; } = new CommandTree(); private Logger _log = LogManager.GetLogger(nameof(CommandManager)); + [Dependency] + private ChatManager _chatManager; public CommandManager(ITorchBase torch, char prefix = '!') : base(torch) { @@ -29,7 +31,7 @@ namespace Torch.Commands public override void Init() { RegisterCommandModule(typeof(TorchCommands)); - Torch.GetManager().MessageRecieved += HandleCommand; + _chatManager.MessageRecieved += HandleCommand; } public bool HasPermission(ulong steamId, Command command) diff --git a/Torch/Managers/ChatManager.cs b/Torch/Managers/ChatManager.cs index a2de253..ef6783f 100644 --- a/Torch/Managers/ChatManager.cs +++ b/Torch/Managers/ChatManager.cs @@ -27,6 +27,9 @@ namespace Torch.Managers internal void RaiseMessageRecieved(ChatMsg msg, ref bool sendToOthers) => MessageRecieved?.Invoke(msg, ref sendToOthers); + [Dependency] + private INetworkManager _networkManager; + public ChatManager(ITorchBase torchInstance) : base(torchInstance) { @@ -36,7 +39,7 @@ namespace Torch.Managers { try { - Torch.GetManager().RegisterNetworkHandler(new ChatIntercept(this)); + _networkManager.RegisterNetworkHandler(new ChatIntercept(this)); } catch { diff --git a/Torch/Managers/DependencyManager.cs b/Torch/Managers/DependencyManager.cs index 8beb64d..bc0bdbf 100644 --- a/Torch/Managers/DependencyManager.cs +++ b/Torch/Managers/DependencyManager.cs @@ -176,6 +176,16 @@ namespace Torch.Managers // tmpQueue.Sort(); If we have priorities this is where to sort them. _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 // Updates the dependency fields with the correct manager instances @@ -184,7 +194,7 @@ namespace Torch.Managers { manager.Dependents.Clear(); 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 } diff --git a/Torch/Managers/MultiplayerManager.cs b/Torch/Managers/MultiplayerManager.cs index def01c5..5cf0966 100644 --- a/Torch/Managers/MultiplayerManager.cs +++ b/Torch/Managers/MultiplayerManager.cs @@ -52,6 +52,13 @@ namespace Torch.Managers private static readonly Logger ChatLog = LogManager.GetLogger("Chat"); private Dictionary _onlinePlayers; + [Dependency] + private ChatManager _chatManager; + [Dependency] + private CommandManager _commandManager; + [Dependency] + private NetworkManager _networkManager; + internal MultiplayerManager(ITorchBase torch) : base(torch) { @@ -61,7 +68,7 @@ namespace Torch.Managers public override void Init() { Torch.SessionLoaded += OnSessionLoaded; - Torch.GetManager().MessageRecieved += Instance_MessageRecieved; + _chatManager.MessageRecieved += Instance_MessageRecieved; } private void Instance_MessageRecieved(ChatMsg msg, ref bool sendToOthers) @@ -125,10 +132,9 @@ namespace Torch.Managers return; ChatHistory.Add(new ChatMessage(DateTime.Now, 0, author, message)); - var commands = Torch.GetManager(); - if (commands.IsCommand(message)) + if (_commandManager.IsCommand(message)) { - var response = commands.HandleCommandFromServer(message); + var response = _commandManager.HandleCommandFromServer(message); ChatHistory.Add(new ChatMessage(DateTime.Now, 0, author, response)); } else @@ -141,7 +147,7 @@ namespace Torch.Managers return; var addToGlobalHistoryMethod = typeof(MyCharacter).GetMethod("OnGlobalMessageSuccess", BindingFlags.Instance | BindingFlags.NonPublic); - Torch.GetManager().RaiseEvent(addToGlobalHistoryMethod, character, steamId, steamId, message); + _networkManager.RaiseEvent(addToGlobalHistoryMethod, character, steamId, steamId, message); } } diff --git a/Torch/Managers/PluginManager.cs b/Torch/Managers/PluginManager.cs index d3acf8f..7bd5c76 100644 --- a/Torch/Managers/PluginManager.cs +++ b/Torch/Managers/PluginManager.cs @@ -20,7 +20,10 @@ namespace Torch.Managers { private static Logger _log = LogManager.GetLogger(nameof(PluginManager)); public readonly string PluginDir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Plugins"); + [Dependency] private UpdateManager _updateManager; + [Dependency] + private CommandManager _commandManager; /// public IList Plugins { get; } = new ObservableList(); @@ -87,9 +90,6 @@ namespace Torch.Managers /// public void LoadPlugins() { - _updateManager = Torch.GetManager(); - var commands = Torch.GetManager(); - if (Torch.Config.ShouldUpdatePlugins) DownloadPlugins(); else @@ -119,7 +119,7 @@ namespace Torch.Managers plugin.StoragePath = Torch.Config.InstancePath; Plugins.Add(plugin); - commands.RegisterPluginCommands(plugin); + _commandManager.RegisterPluginCommands(plugin); } catch (Exception e) { diff --git a/Torch/Managers/UpdateManager.cs b/Torch/Managers/UpdateManager.cs index d51c9bd..719517d 100644 --- a/Torch/Managers/UpdateManager.cs +++ b/Torch/Managers/UpdateManager.cs @@ -25,6 +25,7 @@ namespace Torch.Managers private GitHubClient _gitClient = new GitHubClient(new ProductHeaderValue("Torch")); private string _torchDir = new FileInfo(typeof(UpdateManager).Assembly.Location).DirectoryName; private Logger _log = LogManager.GetLogger(nameof(UpdateManager)); + [Dependency] private FilesystemManager _fsManager; public UpdateManager(ITorchBase torchInstance) : base(torchInstance) @@ -35,7 +36,6 @@ namespace Torch.Managers /// public override void Init() { - _fsManager = Torch.GetManager(); CheckAndUpdateTorch(); }