diff --git a/OpenRA.Game/Network/Connection.cs b/OpenRA.Game/Network/Connection.cs index 3cc90f83d1..21a968eaac 100755 --- a/OpenRA.Game/Network/Connection.cs +++ b/OpenRA.Game/Network/Connection.cs @@ -55,7 +55,7 @@ namespace OpenRA.Network get { return ConnectionState.PreConnecting; } } - public void Send( int frame, List orders ) + public virtual void Send( int frame, List orders ) { var ms = new MemoryStream(); ms.Write( BitConverter.GetBytes( frame ) ); @@ -64,7 +64,7 @@ namespace OpenRA.Network Send( ms.ToArray() ); } - public void SendImmediate( List orders ) + public virtual void SendImmediate( List orders ) { var ms = new MemoryStream(); ms.Write( BitConverter.GetBytes( (int)0 ) ); @@ -73,7 +73,7 @@ namespace OpenRA.Network Send( ms.ToArray() ); } - public void SendSync( int frame, byte[] syncData ) + public virtual void SendSync( int frame, byte[] syncData ) { var ms = new MemoryStream(); ms.Write( BitConverter.GetBytes( frame ) ); @@ -157,6 +157,16 @@ namespace OpenRA.Network public override int LocalClientId { get { return clientId; } } public override ConnectionState ConnectionState { get { return connectionState; } } + List queuedSyncPackets = new List(); + + public override void SendSync( int frame, byte[] syncData ) + { + var ms = new MemoryStream(); + ms.Write( BitConverter.GetBytes( frame ) ); + ms.Write( syncData ); + queuedSyncPackets.Add( ms.ToArray() ); + } + protected override void Send( byte[] packet ) { base.Send( packet ); @@ -166,6 +176,12 @@ namespace OpenRA.Network var ms = new MemoryStream(); ms.Write(BitConverter.GetBytes((int)packet.Length)); ms.Write(packet); + foreach( var q in queuedSyncPackets ) + { + ms.Write( BitConverter.GetBytes( (int)q.Length ) ); + ms.Write( q ); + } + queuedSyncPackets.Clear(); ms.WriteTo(socket.GetStream()); } catch (SocketException) { /* drop this on the floor; we'll pick up the disconnect from the reader thread */ } diff --git a/OpenRA.Game/Network/OrderManager.cs b/OpenRA.Game/Network/OrderManager.cs index 08dcafbe21..4a1df96808 100755 --- a/OpenRA.Game/Network/OrderManager.cs +++ b/OpenRA.Game/Network/OrderManager.cs @@ -99,7 +99,7 @@ namespace OpenRA.Network Dictionary syncForFrame = new Dictionary(); - void CheckSync(byte[] packet) + void CheckSync( byte[] packet ) { var frame = BitConverter.ToInt32(packet, 0); byte[] existingSync; @@ -173,8 +173,6 @@ namespace OpenRA.Network syncReport.UpdateSyncReport(); - CheckSync( ss ); - ++NetFrameNumber; }