Extract OrderIO.SerializeOrders helper.

Note: This changes immediate orders to no longer be
individually framed in their own packets.
This commit is contained in:
Paul Chote
2021-08-23 22:59:03 +01:00
committed by abcdefg30
parent db74f155bb
commit 408f30b5cd
2 changed files with 11 additions and 12 deletions

View File

@@ -52,22 +52,12 @@ namespace OpenRA.Network
public virtual void Send(int frame, IEnumerable<Order> 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<Order> 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)

View File

@@ -79,6 +79,15 @@ namespace OpenRA.Network
return ms.GetBuffer();
}
public static byte[] SerializeOrders(int frame, IEnumerable<Order> 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)