]> git.deb.at Git - rhonda/impostor.git/commitdiff
Refactor Start/FinishRpc to add GameData methods
authorminiduikboot <mini@duikbo.at>
Sun, 30 Jun 2024 12:21:54 +0000 (14:21 +0200)
committerminiduikboot <mini@duikbo.at>
Mon, 29 Jul 2024 17:57:52 +0000 (19:57 +0200)
Rpc's are a specific sort of GameData packets, so it makes sense to
split and extract a method for sending GameData packets from these functions.

src/Impostor.Server/Net/State/Game.Outgoing.cs

index d2bbe06e5330556eb60a17a4a9a6eea7afc6d387..47aa9e9f69955e180f76f34ce26c16612c1dc3a1 100644 (file)
@@ -39,6 +39,27 @@ namespace Impostor.Server.Net.State
         }
 
         public IMessageWriter StartRpc(uint targetNetId, RpcCalls callId, int? targetClientId = null, MessageType type = MessageType.Reliable)
+        {
+            var writer = StartGameData(targetClientId, type);
+
+            writer.StartMessage(GameDataTag.RpcFlag);
+            writer.WritePacked(targetNetId);
+            writer.Write((byte)callId);
+
+            return writer;
+        }
+
+        public ValueTask FinishRpcAsync(IMessageWriter writer, int? targetClientId = null)
+        {
+            writer.EndMessage();
+            return FinishGameDataAsync(writer, targetClientId);
+        }
+
+        /// <summary>Start a GameData(To) message.</summary>
+        /// <param name="targetClientId">The client to target if needed, `null` otherwise.</param>
+        /// <param name="type">The type of message to send, defaults to reliable.</param>
+        /// <returns>MessageWriter that should be handed back to <see cref="FinishGameDataAsync"/>.</returns>
+        private IMessageWriter StartGameData(int? targetClientId = null, MessageType type = MessageType.Reliable)
         {
             var writer = MessageWriter.Get(type);
 
@@ -54,17 +75,16 @@ namespace Impostor.Server.Net.State
                 writer.WritePacked(targetClientId.Value);
             }
 
-            writer.StartMessage(GameDataTag.RpcFlag);
-            writer.WritePacked(targetNetId);
-            writer.Write((byte)callId);
-
             return writer;
         }
 
-        public ValueTask FinishRpcAsync(IMessageWriter writer, int? targetClientId = null)
+        /// <summary>Finalize and send a GameData packet.</summary>
+        /// <param name="writer">MessageWriter received from <see cref="StartGameData"/>.</param>
+        /// <param name="targetClientId">Same target ClientId passed to StartGameData.</param>
+        /// <returns>Task that sends the packet.</returns>
+        private ValueTask FinishGameDataAsync(IMessageWriter writer, int? targetClientId = null)
         {
             writer.EndMessage();
-            writer.EndMessage();
 
             return targetClientId.HasValue
                 ? SendToAsync(writer, targetClientId.Value)