]> git.deb.at Git - rhonda/impostor.git/commitdiff
Fixed #94 - Allows plugins to get a IMessageWriter
authorAeonLucid <aeonlucid@outlook.com>
Fri, 30 Oct 2020 18:37:13 +0000 (19:37 +0100)
committerAeonLucid <aeonlucid@outlook.com>
Fri, 30 Oct 2020 18:37:13 +0000 (19:37 +0100)
src/Impostor.Api/Net/Messages/IMessageWriterProvider.cs [new file with mode: 0644]
src/Impostor.Hazel/MessageWriter.cs
src/Impostor.Server/Net/Messages/MessageWriterProvider.cs [new file with mode: 0644]
src/Impostor.Server/Program.cs

diff --git a/src/Impostor.Api/Net/Messages/IMessageWriterProvider.cs b/src/Impostor.Api/Net/Messages/IMessageWriterProvider.cs
new file mode 100644 (file)
index 0000000..f398939
--- /dev/null
@@ -0,0 +1,16 @@
+namespace Impostor.Api.Net.Messages
+{
+    public interface IMessageWriterProvider
+    {
+        /// <summary>
+        ///     Retrieves a <see cref="IMessageWriter"/> from the internal pool.
+        ///     Make sure to call <see cref="IMessageWriter.Dispose"/> when you are done!
+        /// </summary>
+        /// <param name="sendOption">
+        ///     Whether to send the message as <see cref="MessageType.Reliable"/> or <see cref="MessageType.Unreliable"/>.
+        ///     Reliable packets will ensure delivery while unreliable packets may be lost.
+        /// </param>
+        /// <returns>A <see cref="IMessageWriter"/> from the pool.</returns>
+        IMessageWriter Get(MessageType sendOption = MessageType.Unreliable);
+    }
+}
index 10f006515ebf431366da9887bfc369d0fe19d705..d12c7c94da07c8f57986e4d8589412df25855f2c 100644 (file)
@@ -8,11 +8,10 @@ using System.Text;
 
 namespace Impostor.Hazel
 {
-    ///
     public class MessageWriter : IMessageWriter, IRecyclable, IDisposable
     {
-        public static int BufferSize = 64000;
-        public static readonly ObjectPool<MessageWriter> WriterPool = new ObjectPool<MessageWriter>(() => new MessageWriter(BufferSize));
+        private static int BufferSize = 64000;
+        private static readonly ObjectPool<MessageWriter> WriterPool = new ObjectPool<MessageWriter>(() => new MessageWriter(BufferSize));
 
         public MessageType SendOption { get; private set; }
 
@@ -333,4 +332,4 @@ namespace Impostor.Hazel
             Recycle();
         }
     }
-}
\ No newline at end of file
+}
diff --git a/src/Impostor.Server/Net/Messages/MessageWriterProvider.cs b/src/Impostor.Server/Net/Messages/MessageWriterProvider.cs
new file mode 100644 (file)
index 0000000..707860e
--- /dev/null
@@ -0,0 +1,13 @@
+using Impostor.Api.Net.Messages;
+using Impostor.Hazel;
+
+namespace Impostor.Server.Net.Messages
+{
+    public class MessageWriterProvider : IMessageWriterProvider
+    {
+        public IMessageWriter Get(MessageType sendOption = MessageType.Unreliable)
+        {
+            return MessageWriter.Get(sendOption);
+        }
+    }
+}
index f699e739df03743644893f74437c79e4d169c2fc..a646267c9ec01531782bff84429bc6aa19c3030b 100644 (file)
@@ -3,11 +3,13 @@ using Impostor.Api.Events.Managers;
 using Impostor.Api.Games;
 using Impostor.Api.Games.Managers;
 using Impostor.Api.Net.Manager;
+using Impostor.Api.Net.Messages;
 using Impostor.Server.Config;
 using Impostor.Server.Events;
 using Impostor.Server.Net;
 using Impostor.Server.Net.Factories;
 using Impostor.Server.Net.Manager;
+using Impostor.Server.Net.Messages;
 using Impostor.Server.Net.Redirector;
 using Impostor.Server.Plugins;
 using Impostor.Server.Recorder;
@@ -169,6 +171,7 @@ namespace Impostor.Server
                         services.AddSingleton<IGameManager>(p => p.GetRequiredService<GameManager>());
                     }
 
+                    services.AddSingleton<IMessageWriterProvider, MessageWriterProvider>();
                     services.AddSingleton<IGameCodeFactory, GameCodeFactory>();
                     services.AddSingleton<IEventManager, EventManager>();
                     services.AddSingleton<Matchmaker>();
@@ -179,4 +182,4 @@ namespace Impostor.Server
                 .UsePluginLoader(pluginConfig);
         }
     }
-}
\ No newline at end of file
+}