Allow the server to ack no or multiple packets in the same frame.

This commit is contained in:
Paul Chote
2021-09-25 15:09:23 +01:00
committed by abcdefg30
parent a13d046304
commit 2d08f2bbfd
4 changed files with 40 additions and 13 deletions

View File

@@ -627,13 +627,14 @@ namespace OpenRA.Server
return ms.GetBuffer();
}
byte[] CreateAckFrame(int frame)
byte[] CreateAckFrame(int frame, byte count)
{
var ms = new MemoryStream(13);
ms.WriteArray(BitConverter.GetBytes(5));
var ms = new MemoryStream(14);
ms.WriteArray(BitConverter.GetBytes(6));
ms.WriteArray(BitConverter.GetBytes(0));
ms.WriteArray(BitConverter.GetBytes(frame));
ms.WriteByte((byte)OrderType.Ack);
ms.WriteByte(count);
return ms.GetBuffer();
}
@@ -813,7 +814,7 @@ namespace OpenRA.Server
if (data.Length == 0 || data[0] != (byte)OrderType.SyncHash)
{
frame += OrderLatency;
DispatchFrameToClient(conn, conn.PlayerIndex, CreateAckFrame(frame));
DispatchFrameToClient(conn, conn.PlayerIndex, CreateAckFrame(frame, 1));
// Track the last frame for each client so the disconnect handling can write
// an EndOfOrders marker with the correct frame number.