Prevent immediate orders from being sent as regular orders
This commit is contained in:
@@ -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));
|
||||||
|
|||||||
@@ -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,7 +99,10 @@ namespace OpenRA.Network
|
|||||||
|
|
||||||
public void IssueOrder(Order order)
|
public void IssueOrder(Order order)
|
||||||
{
|
{
|
||||||
localOrders.Add(order);
|
if (order.IsImmediate)
|
||||||
|
localImmediateOrders.Add(order);
|
||||||
|
else
|
||||||
|
localOrders.Add(order);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Action<Color, string, string> AddChatLine = (c, n, s) => { };
|
public Action<Color, string, string> AddChatLine = (c, n, s) => { };
|
||||||
@@ -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[]>>();
|
||||||
|
|
||||||
|
|||||||
@@ -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)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user