diff --git a/OpenRA.Game/Network/Connection.cs b/OpenRA.Game/Network/Connection.cs index 55f327eb39..3263870618 100644 --- a/OpenRA.Game/Network/Connection.cs +++ b/OpenRA.Game/Network/Connection.cs @@ -31,7 +31,7 @@ namespace OpenRA.Network int LocalClientId { get; } ConnectionState ConnectionState { get; } void Send(int frame, List orders); - void SendImmediate(List orders); + void SendImmediate(IEnumerable orders); void SendSync(int frame, byte[] syncData); void Receive(Action packetFn); } @@ -66,7 +66,7 @@ namespace OpenRA.Network Send(ms.ToArray()); } - public virtual void SendImmediate(List orders) + public virtual void SendImmediate(IEnumerable orders) { var ms = new MemoryStream(); ms.WriteArray(BitConverter.GetBytes(0)); diff --git a/OpenRA.Game/Network/OrderManager.cs b/OpenRA.Game/Network/OrderManager.cs index 0930f838de..989c162bfe 100644 --- a/OpenRA.Game/Network/OrderManager.cs +++ b/OpenRA.Game/Network/OrderManager.cs @@ -49,6 +49,7 @@ namespace OpenRA.Network internal int GameSaveLastSyncFrame = -1; List localOrders = new List(); + List localImmediateOrders = new List(); List chatCache = new List(); @@ -98,7 +99,10 @@ namespace OpenRA.Network public void IssueOrder(Order order) { - localOrders.Add(order); + if (order.IsImmediate) + localImmediateOrders.Add(order); + else + localOrders.Add(order); } public Action AddChatLine = (c, n, s) => { }; @@ -109,10 +113,9 @@ namespace OpenRA.Network public void TickImmediate() { - var immediateOrders = localOrders.Where(o => o.IsImmediate).ToList(); - if (immediateOrders.Count != 0 && GameSaveLastFrame < NetFrameNumber + FramesAhead) - Connection.SendImmediate(immediateOrders.Select(o => o.Serialize()).ToList()); - localOrders.RemoveAll(o => o.IsImmediate); + if (localImmediateOrders.Count != 0 && GameSaveLastFrame < NetFrameNumber + FramesAhead) + Connection.SendImmediate(localImmediateOrders.Select(o => o.Serialize())); + localImmediateOrders.Clear(); var immediatePackets = new List>(); diff --git a/OpenRA.Game/Network/ReplayConnection.cs b/OpenRA.Game/Network/ReplayConnection.cs index 3166ff7548..f0c5b16c91 100644 --- a/OpenRA.Game/Network/ReplayConnection.cs +++ b/OpenRA.Game/Network/ReplayConnection.cs @@ -125,7 +125,7 @@ namespace OpenRA.Network // Do nothing: ignore locally generated orders public void Send(int frame, List orders) { } - public void SendImmediate(List orders) { } + public void SendImmediate(IEnumerable orders) { } public void SendSync(int frame, byte[] syncData) {