From 9d8f4a7038aaadda1869d33cb75f38ca3f6fd1a4 Mon Sep 17 00:00:00 2001
From: jsalmon3 <>
Date: Fri, 24 Jan 2003 04:37:56 +0000
Subject: [PATCH] Send oldest commands first

---
 src/network/network.cpp | 35 +++++++++++++++++++----------------
 1 file changed, 19 insertions(+), 16 deletions(-)

diff --git a/src/network/network.cpp b/src/network/network.cpp
index ac140f463..63078505a 100644
--- a/src/network/network.cpp
+++ b/src/network/network.cpp
@@ -284,6 +284,7 @@ local int NetworkSyncHashs[256];	/// Network sync hashs.
 local NetworkCommandQueue NetworkIn[256][PlayerMax]; /// Per-player network packet input queue
 local DL_LIST(CommandsIn);		/// Network command input queue
 local DL_LIST(CommandsOut);		/// Network command output queue
+local DL_LIST(MsgCommandsIn);		/// Network message input queue
 
 #ifdef DEBUG
 local int NetworkReceivedPackets;	/// Packets received packets
@@ -453,6 +454,7 @@ global void InitNetwork1(void)
 
     dl_init(CommandsIn);
     dl_init(CommandsOut);
+    dl_init(MsgCommandsIn);
 }
 
 /**
@@ -819,7 +821,7 @@ global void NetworkChatMessage(const char *msg)
 	n = strlen(msg);
 	while (n >= (int)sizeof(ncm->Text)) {
 	    ncq = malloc(sizeof(NetworkCommandQueue));
-	    dl_insert_last(CommandsIn, ncq->List);
+	    dl_insert_first(MsgCommandsIn, ncq->List);
 	    ncq->Data.Type = MessageChat;
 	    ncm = (NetworkChat *)(&ncq->Data);
 	    ncm->Player = ThisPlayer->Player;
@@ -828,7 +830,7 @@ global void NetworkChatMessage(const char *msg)
 	    n -= sizeof(ncm->Text);
 	}
 	ncq = malloc(sizeof(NetworkCommandQueue));
-	dl_insert_last(CommandsIn, ncq->List);
+	dl_insert_first(MsgCommandsIn, ncq->List);
 	ncq->Data.Type = MessageChatTerm;
 	ncm = (NetworkChat *)(&ncq->Data);
 	ncm->Player = ThisPlayer->Player;
@@ -946,7 +948,7 @@ local void NetworkSendCommands(void)
     //
     //	No command available, send sync.
     //
-    if (dl_empty(CommandsIn)) {
+    if (dl_empty(CommandsIn) && dl_empty(MsgCommandsIn)) {
 	ncq = malloc(sizeof(NetworkCommandQueue));
 	ncq->Data.Type = MessageSync;
 	ncq->Data.Unit = htons(SyncHash&0xFFFF);
@@ -955,21 +957,22 @@ local void NetworkSendCommands(void)
 	// FIXME: can compress sync-messages.
     } else {
 	DebugLevel3Fn("command in remove\n");
-	ncq = (NetworkCommandQueue *)CommandsIn->first;
-	// ncq = BASE_OF(NetworkCommandQueue,List[0], CommandsIn->first);
-
-	IfDebug(
-	if (ncq->Data.Type != MessageChat
-		&& ncq->Data.Type != MessageChatTerm
-		&& ncq->Data.Type != MessageExtendedCommand) {
-	    // FIXME: we can send destoyed units over network :(
-	    if (UnitSlots[ntohs(ncq->Data.Unit)]->Destroyed) {
-		DebugLevel0Fn("Sending destroyed unit %d over network!!!!!!\n" _C_
-			ntohs(ncq->Data.Unit));
+	if (!dl_empty(CommandsIn)) {
+	    ncq = (NetworkCommandQueue *)CommandsIn->last;
+	    IfDebug(
+	    if (ncq->Data.Type != MessageExtendedCommand) {
+		// FIXME: we can send destoyed units over network :(
+		if (UnitSlots[ntohs(ncq->Data.Unit)]->Destroyed) {
+		    DebugLevel0Fn("Sending destroyed unit %d over network!!!!!!\n" _C_
+			    ntohs(ncq->Data.Unit));
+		}
 	    }
+	    );
+	    dl_remove_last(CommandsIn);
+	} else {
+	    ncq = (NetworkCommandQueue *)MsgCommandsIn->last;
+	    dl_remove_last(MsgCommandsIn);
 	}
-	);
-	dl_remove_first(CommandsIn);
     }
 
     //	Insert in output queue.