Prevent immediate orders from being sent as regular orders

This commit is contained in:
jrb0001
2019-01-11 22:03:27 +01:00
committed by reaperrr
parent 55aa346ad7
commit f3133617dd
3 changed files with 11 additions and 8 deletions

View File

@@ -31,7 +31,7 @@ namespace OpenRA.Network
int LocalClientId { get; } int LocalClientId { get; }
ConnectionState ConnectionState { get; } ConnectionState ConnectionState { get; }
void Send(int frame, List<byte[]> orders); void Send(int frame, List<byte[]> orders);
void SendImmediate(List<byte[]> orders); void SendImmediate(IEnumerable<byte[]> orders);
void SendSync(int frame, byte[] syncData); void SendSync(int frame, byte[] syncData);
void Receive(Action<int, byte[]> packetFn); void Receive(Action<int, byte[]> packetFn);
} }
@@ -66,7 +66,7 @@ namespace OpenRA.Network
Send(ms.ToArray()); Send(ms.ToArray());
} }
public virtual void SendImmediate(List<byte[]> orders) public virtual void SendImmediate(IEnumerable<byte[]> orders)
{ {
var ms = new MemoryStream(); var ms = new MemoryStream();
ms.WriteArray(BitConverter.GetBytes(0)); ms.WriteArray(BitConverter.GetBytes(0));

View File

@@ -49,6 +49,7 @@ namespace OpenRA.Network
internal int GameSaveLastSyncFrame = -1; internal int GameSaveLastSyncFrame = -1;
List<Order> localOrders = new List<Order>(); List<Order> localOrders = new List<Order>();
List<Order> localImmediateOrders = new List<Order>();
List<ChatLine> chatCache = new List<ChatLine>(); List<ChatLine> chatCache = new List<ChatLine>();
@@ -98,6 +99,9 @@ namespace OpenRA.Network
public void IssueOrder(Order order) public void IssueOrder(Order order)
{ {
if (order.IsImmediate)
localImmediateOrders.Add(order);
else
localOrders.Add(order); localOrders.Add(order);
} }
@@ -109,10 +113,9 @@ namespace OpenRA.Network
public void TickImmediate() public void TickImmediate()
{ {
var immediateOrders = localOrders.Where(o => o.IsImmediate).ToList(); if (localImmediateOrders.Count != 0 && GameSaveLastFrame < NetFrameNumber + FramesAhead)
if (immediateOrders.Count != 0 && GameSaveLastFrame < NetFrameNumber + FramesAhead) Connection.SendImmediate(localImmediateOrders.Select(o => o.Serialize()));
Connection.SendImmediate(immediateOrders.Select(o => o.Serialize()).ToList()); localImmediateOrders.Clear();
localOrders.RemoveAll(o => o.IsImmediate);
var immediatePackets = new List<Pair<int, byte[]>>(); var immediatePackets = new List<Pair<int, byte[]>>();

View File

@@ -125,7 +125,7 @@ namespace OpenRA.Network
// Do nothing: ignore locally generated orders // Do nothing: ignore locally generated orders
public void Send(int frame, List<byte[]> orders) { } public void Send(int frame, List<byte[]> orders) { }
public void SendImmediate(List<byte[]> orders) { } public void SendImmediate(IEnumerable<byte[]> orders) { }
public void SendSync(int frame, byte[] syncData) public void SendSync(int frame, byte[] syncData)
{ {