]> git.deb.at Git - rhonda/impostor.git/commitdiff
Fixes NullReferenceException inside MultiDisposable
authorAeonLucid <aeonlucid@outlook.com>
Thu, 12 Nov 2020 02:42:06 +0000 (03:42 +0100)
committerAeonLucid <aeonlucid@outlook.com>
Thu, 12 Nov 2020 02:42:06 +0000 (03:42 +0100)
src/Impostor.Plugins.Example/ExamplePlugin.cs
src/Impostor.Plugins.Example/ExamplePluginStartup.cs [new file with mode: 0644]
src/Impostor.Plugins.Example/Handlers/PlayerEventListener.cs
src/Impostor.Plugins.Example/Impostor.Plugins.Example.csproj
src/Impostor.Server/Events/MultiDisposable.cs

index cd6313cd282cf1b248ae7021b181704a24e50da4..dafba7c478aea803b453d886c073d6fdc4c0c41a 100644 (file)
@@ -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<ExamplePlugin> _logger;
-        private readonly IEventManager _eventManager;
-        private IDisposable[] _cancel;
 
-        public ExamplePlugin(ILogger<ExamplePlugin> logger, IEventManager eventManager)
+        public ExamplePlugin(ILogger<ExamplePlugin> 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 (file)
index 0000000..936f15e
--- /dev/null
@@ -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<IEventListener, GameEventListener>();
+            services.AddSingleton<IEventListener, PlayerEventListener>();
+            services.AddSingleton<IEventListener, MeetingEventListener>();
+        }
+    }
+}
index 31a66b638826347bb64e4131f4f7566f52b98e8c..7238c25295950ae9fa2e480b3a512bff6dcc7d1f 100644 (file)
@@ -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<PlayerEventListener> _logger;
+
+        public PlayerEventListener(ILogger<PlayerEventListener> 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");
+        }
     }
 }
index d72de8209721b526d4c2dba422b7a38dffb747be..dd4724dc1b7e5cbf14785413baddca1411f9e557 100644 (file)
@@ -5,7 +5,7 @@
   </PropertyGroup>
   
   <ItemGroup>
-    <ProjectReference Include="..\Impostor.Api\Impostor.Api.csproj"/>
+    <ProjectReference Include="..\Impostor.Api\Impostor.Api.csproj" />
   </ItemGroup>
 
 </Project>
index fc6a6f0a6504d757b47003963d9fb55d733f4d59..b68f06401b33245677534002b7b2a18d11131ee3 100644 (file)
@@ -19,8 +19,8 @@ namespace Impostor.Server.Events
         {
             foreach (var disposable in _disposables)
             {
-                disposable.Dispose();
+                disposable?.Dispose();
             }
         }
     }
-}
\ No newline at end of file
+}