From: AeonLucid Date: Thu, 12 Nov 2020 02:42:06 +0000 (+0100) Subject: Fixes NullReferenceException inside MultiDisposable X-Git-Tag: v1.2.2~31 X-Git-Url: https://git.deb.at/?a=commitdiff_plain;h=9da5b42c1f45d92b7be4fc9a558d24e2929960ed;p=rhonda%2Fimpostor.git Fixes NullReferenceException inside MultiDisposable --- diff --git a/src/Impostor.Plugins.Example/ExamplePlugin.cs b/src/Impostor.Plugins.Example/ExamplePlugin.cs index cd6313c..dafba7c 100644 --- a/src/Impostor.Plugins.Example/ExamplePlugin.cs +++ b/src/Impostor.Plugins.Example/ExamplePlugin.cs @@ -1,8 +1,5 @@ -using System; -using System.Threading.Tasks; -using Impostor.Api.Events.Managers; +using System.Threading.Tasks; using Impostor.Api.Plugins; -using Impostor.Plugins.Example.Handlers; using Microsoft.Extensions.Logging; namespace Impostor.Plugins.Example @@ -15,38 +12,21 @@ namespace Impostor.Plugins.Example public class ExamplePlugin : PluginBase { private readonly ILogger _logger; - private readonly IEventManager _eventManager; - private IDisposable[] _cancel; - public ExamplePlugin(ILogger logger, IEventManager eventManager) + public ExamplePlugin(ILogger logger) { _logger = logger; - _eventManager = eventManager; } public override ValueTask EnableAsync() { _logger.LogInformation("Example is being enabled."); - - _cancel = new[] - { - _eventManager.RegisterListener(new GameEventListener()), - _eventManager.RegisterListener(new PlayerEventListener()), - _eventManager.RegisterListener(new MeetingEventListener()) - }; - return default; } public override ValueTask DisableAsync() { _logger.LogInformation("Example is being disabled."); - - foreach (var c in _cancel) - { - c.Dispose(); - } - return default; } } diff --git a/src/Impostor.Plugins.Example/ExamplePluginStartup.cs b/src/Impostor.Plugins.Example/ExamplePluginStartup.cs new file mode 100644 index 0000000..936f15e --- /dev/null +++ b/src/Impostor.Plugins.Example/ExamplePluginStartup.cs @@ -0,0 +1,22 @@ +using Impostor.Api.Events; +using Impostor.Api.Plugins; +using Impostor.Plugins.Example.Handlers; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; + +namespace Impostor.Plugins.Example +{ + public class ExamplePluginStartup : IPluginStartup + { + public void ConfigureHost(IHostBuilder host) + { + } + + public void ConfigureServices(IServiceCollection services) + { + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + } + } +} diff --git a/src/Impostor.Plugins.Example/Handlers/PlayerEventListener.cs b/src/Impostor.Plugins.Example/Handlers/PlayerEventListener.cs index 31a66b6..7238c25 100644 --- a/src/Impostor.Plugins.Example/Handlers/PlayerEventListener.cs +++ b/src/Impostor.Plugins.Example/Handlers/PlayerEventListener.cs @@ -3,6 +3,7 @@ using System.Threading.Tasks; using Impostor.Api.Events; using Impostor.Api.Events.Player; using Impostor.Api.Innersloth.Customization; +using Microsoft.Extensions.Logging; namespace Impostor.Plugins.Example.Handlers { @@ -10,16 +11,24 @@ namespace Impostor.Plugins.Example.Handlers { private static readonly Random Random = new Random(); + private readonly ILogger _logger; + + public PlayerEventListener(ILogger logger) + { + _logger = logger; + } + [EventListener] public void OnPlayerSpawned(IPlayerSpawnedEvent e) { - Console.WriteLine(e.PlayerControl.PlayerInfo.PlayerName + " spawned"); + _logger.LogDebug(e.PlayerControl.PlayerInfo.PlayerName + " spawned"); // Need to make a local copy because it might be possible that // the event gets changed after being handled. var clientPlayer = e.ClientPlayer; var playerControl = e.PlayerControl; + /* Task.Run(async () => { Console.WriteLine("Starting player task."); @@ -39,20 +48,21 @@ namespace Impostor.Plugins.Example.Handlers await Task.Delay(TimeSpan.FromMilliseconds(5000)); } - Console.WriteLine("Stopping player task."); + _logger.LogDebug("Stopping player task."); }); + */ } [EventListener] public void OnPlayerDestroyed(IPlayerDestroyedEvent e) { - Console.WriteLine(e.PlayerControl.PlayerInfo.PlayerName + " destroyed"); + _logger.LogDebug(e.PlayerControl.PlayerInfo.PlayerName + " destroyed"); } [EventListener] public async ValueTask OnPlayerChat(IPlayerChatEvent e) { - Console.WriteLine(e.PlayerControl.PlayerInfo.PlayerName + " said " + e.Message); + _logger.LogDebug(e.PlayerControl.PlayerInfo.PlayerName + " said " + e.Message); if (e.Message == "test") { @@ -74,5 +84,11 @@ namespace Impostor.Plugins.Example.Handlers await e.PlayerControl.SetNameAsync(e.Message); await e.PlayerControl.SendChatAsync(e.Message); } + + [EventListener] + public void OnPlayerReportedBodyEvent(IPlayerReportedBodyEvent e) + { + _logger.LogDebug("Player reported body"); + } } } diff --git a/src/Impostor.Plugins.Example/Impostor.Plugins.Example.csproj b/src/Impostor.Plugins.Example/Impostor.Plugins.Example.csproj index d72de82..dd4724d 100644 --- a/src/Impostor.Plugins.Example/Impostor.Plugins.Example.csproj +++ b/src/Impostor.Plugins.Example/Impostor.Plugins.Example.csproj @@ -5,7 +5,7 @@ - + diff --git a/src/Impostor.Server/Events/MultiDisposable.cs b/src/Impostor.Server/Events/MultiDisposable.cs index fc6a6f0..b68f064 100644 --- a/src/Impostor.Server/Events/MultiDisposable.cs +++ b/src/Impostor.Server/Events/MultiDisposable.cs @@ -19,8 +19,8 @@ namespace Impostor.Server.Events { foreach (var disposable in _disposables) { - disposable.Dispose(); + disposable?.Dispose(); } } } -} \ No newline at end of file +}