diff --git a/OpenRA.Game/Network/Connection.cs b/OpenRA.Game/Network/Connection.cs index e05d73ec2d..e1159a6870 100644 --- a/OpenRA.Game/Network/Connection.cs +++ b/OpenRA.Game/Network/Connection.cs @@ -52,22 +52,12 @@ namespace OpenRA.Network public virtual void Send(int frame, IEnumerable orders) { - var ms = new MemoryStream(); - ms.WriteArray(BitConverter.GetBytes(frame)); - foreach (var o in orders) - ms.WriteArray(o.Serialize()); - Send(ms.ToArray()); + Send(OrderIO.SerializeOrders(frame, orders)); } public virtual void SendImmediate(IEnumerable orders) { - foreach (var o in orders) - { - var ms = new MemoryStream(); - ms.WriteArray(BitConverter.GetBytes(0)); - ms.WriteArray(o.Serialize()); - Send(ms.ToArray()); - } + Send(OrderIO.SerializeOrders(0, orders)); } public virtual void SendSync(int frame, int syncHash, ulong defeatState) diff --git a/OpenRA.Game/Network/OrderIO.cs b/OpenRA.Game/Network/OrderIO.cs index 2a0961299c..d8ca90e162 100644 --- a/OpenRA.Game/Network/OrderIO.cs +++ b/OpenRA.Game/Network/OrderIO.cs @@ -79,6 +79,15 @@ namespace OpenRA.Network return ms.GetBuffer(); } + public static byte[] SerializeOrders(int frame, IEnumerable orders) + { + var ms = new MemoryStream(); + ms.WriteArray(BitConverter.GetBytes(frame)); + foreach (var o in orders) + ms.WriteArray(o.Serialize()); + return ms.ToArray(); + } + public static bool TryParseDisconnect(byte[] packet, out int clientId) { if (packet.Length == Order.DisconnectOrderLength + 4 && packet[4] == (byte)OrderType.Disconnect)