From 4c766f29b4a290272da0f42b32a14046d094b39c Mon Sep 17 00:00:00 2001 From: SpoinkyNL Date: Wed, 9 Nov 2016 13:15:46 +0100 Subject: [PATCH] Fixed module null references on shutdown --- Artemis/Artemis/Managers/ProfileManager.cs | 49 ++++++++++--------- .../Artemis/Modules/Games/GtaV/GtaVModel.cs | 24 ++++----- .../Modules/Games/Overwatch/OverwatchModel.cs | 6 +-- .../Games/TheDivision/TheDivisionModel.cs | 4 +- Artemis/Artemis/Modules/Games/WoW/WoWModel.cs | 2 +- .../Utilities/GameState/GameStateWebServer.cs | 1 - 6 files changed, 45 insertions(+), 41 deletions(-) diff --git a/Artemis/Artemis/Managers/ProfileManager.cs b/Artemis/Artemis/Managers/ProfileManager.cs index c44cb6f1a..8d5c36836 100644 --- a/Artemis/Artemis/Managers/ProfileManager.cs +++ b/Artemis/Artemis/Managers/ProfileManager.cs @@ -51,34 +51,39 @@ namespace Artemis.Managers ProfilePreviewModel == null) return; - var activePreview = GameViewModels.FirstOrDefault(vm => vm.IsActive); - if (activePreview == null) + lock (GameViewModels) { - // Should not be active if no selected profile is set - if (_effectManager.ActiveEffect != ProfilePreviewModel) - return; + var activePreview = GameViewModels.FirstOrDefault(vm => vm.IsActive); - _logger.Debug("Loading last effect after profile preview"); - var lastEffect = _effectManager.GetLastEffect(); - if (lastEffect != null) - _effectManager.ChangeEffect(lastEffect); - else - _effectManager.ClearEffect(); - } - else - { - if (_effectManager.ActiveEffect != ProfilePreviewModel && !(_effectManager.ActiveEffect is GameModel)) + if (activePreview == null) { - _logger.Debug("Activate profile preview"); - _effectManager.ChangeEffect(ProfilePreviewModel); + // Should not be active if no selected profile is set + if (_effectManager.ActiveEffect != ProfilePreviewModel) + return; + + _logger.Debug("Loading last effect after profile preview"); + var lastEffect = _effectManager.GetLastEffect(); + if (lastEffect != null) + _effectManager.ChangeEffect(lastEffect); + else + _effectManager.ClearEffect(); } + else + { + if (_effectManager.ActiveEffect != ProfilePreviewModel && + !(_effectManager.ActiveEffect is GameModel)) + { + _logger.Debug("Activate profile preview"); + _effectManager.ChangeEffect(ProfilePreviewModel); + } - // LoopManager might be running, this method won't do any harm in that case. - _loopManager.StartAsync(); + // LoopManager might be running, this method won't do any harm in that case. + _loopManager.StartAsync(); - ProfilePreviewModel.ProfileViewModel = activePreview.ProfileEditor.ProfileViewModel; - if (!ReferenceEquals(ProfilePreviewModel.Profile, activePreview.ProfileEditor.SelectedProfile)) - ProfilePreviewModel.Profile = activePreview.ProfileEditor.SelectedProfile; + ProfilePreviewModel.ProfileViewModel = activePreview.ProfileEditor.ProfileViewModel; + if (!ReferenceEquals(ProfilePreviewModel.Profile, activePreview.ProfileEditor.SelectedProfile)) + ProfilePreviewModel.Profile = activePreview.ProfileEditor.SelectedProfile; + } } } } diff --git a/Artemis/Artemis/Modules/Games/GtaV/GtaVModel.cs b/Artemis/Artemis/Modules/Games/GtaV/GtaVModel.cs index 703dd740e..f3b3d1943 100644 --- a/Artemis/Artemis/Modules/Games/GtaV/GtaVModel.cs +++ b/Artemis/Artemis/Modules/Games/GtaV/GtaVModel.cs @@ -39,7 +39,7 @@ namespace Artemis.Modules.Games.GtaV // Delay restoring the DLL to allow GTA to release it Task.Factory.StartNew(() => { - Thread.Sleep(2000); + Thread.Sleep(5000); DllManager.RestoreLogitechDll(); }); @@ -59,17 +59,17 @@ namespace Artemis.Modules.Games.GtaV private void PipeServerOnPipeMessage(string reply) { - if (!Initialized) - return; - - // Convert the given string to a list of ints - var stringParts = reply.Split(' '); - var parts = new string[stringParts.Length]; - for (var i = 0; i < stringParts.Length; i++) - parts[i] = stringParts[i]; - - if (parts[0] == "0") - InterpertrateLighting(parts); +// if (!Initialized) +// return; +// +// // Convert the given string to a list of ints +// var stringParts = reply.Split(' '); +// var parts = new string[stringParts.Length]; +// for (var i = 0; i < stringParts.Length; i++) +// parts[i] = stringParts[i]; +// +// if (parts[0] == "0") +// InterpertrateLighting(parts); } private void InterpertrateLighting(string[] parts) diff --git a/Artemis/Artemis/Modules/Games/Overwatch/OverwatchModel.cs b/Artemis/Artemis/Modules/Games/Overwatch/OverwatchModel.cs index e5b96bb64..45bd862fc 100644 --- a/Artemis/Artemis/Modules/Games/Overwatch/OverwatchModel.cs +++ b/Artemis/Artemis/Modules/Games/Overwatch/OverwatchModel.cs @@ -88,9 +88,9 @@ namespace Artemis.Modules.Games.Overwatch { Initialized = false; - _stickyStatus.Dispose(); - _stickyUltimateReady.Dispose(); - _stickyUltimateUsed.Dispose(); + _stickyStatus?.Dispose(); + _stickyUltimateReady?.Dispose(); + _stickyUltimateUsed?.Dispose(); _pipeServer.PipeMessage -= PipeServerOnPipeMessage; base.Dispose(); diff --git a/Artemis/Artemis/Modules/Games/TheDivision/TheDivisionModel.cs b/Artemis/Artemis/Modules/Games/TheDivision/TheDivisionModel.cs index ac2f2910c..59c039431 100644 --- a/Artemis/Artemis/Modules/Games/TheDivision/TheDivisionModel.cs +++ b/Artemis/Artemis/Modules/Games/TheDivision/TheDivisionModel.cs @@ -40,8 +40,8 @@ namespace Artemis.Modules.Games.TheDivision DllManager.RestoreLogitechDll(); }); - _stickyAmmo.Dispose(); - _stickyHp.Dispose(); + _stickyAmmo?.Dispose(); + _stickyHp?.Dispose(); _pipeServer.PipeMessage -= PipeServerOnPipeMessage; base.Dispose(); diff --git a/Artemis/Artemis/Modules/Games/WoW/WoWModel.cs b/Artemis/Artemis/Modules/Games/WoW/WoWModel.cs index ef4c43080..c0c50cd2e 100644 --- a/Artemis/Artemis/Modules/Games/WoW/WoWModel.cs +++ b/Artemis/Artemis/Modules/Games/WoW/WoWModel.cs @@ -70,7 +70,7 @@ namespace Artemis.Modules.Games.WoW { Initialized = false; - _process.Dispose(); + _process?.Dispose(); _process = null; base.Dispose(); } diff --git a/Artemis/Artemis/Utilities/GameState/GameStateWebServer.cs b/Artemis/Artemis/Utilities/GameState/GameStateWebServer.cs index 8fd14ecfd..85dd34ed5 100644 --- a/Artemis/Artemis/Utilities/GameState/GameStateWebServer.cs +++ b/Artemis/Artemis/Utilities/GameState/GameStateWebServer.cs @@ -62,7 +62,6 @@ namespace Artemis.Utilities.GameState private void ListenerRun() { - // TODO: Check for UI issue while (Running) { _listener.BeginGetContext(HandleRequest, _listener);