+ server_frame_counter =
+ (buffer[2] << 24) | (buffer[3] << 16) | (buffer[4] << 8) | (buffer[5]);
+
+ if (server_frame_counter != FrameCounter)
+ {
+ Error(ERR_RETURN, "client and servers frame counters out of sync");
+ Error(ERR_RETURN, "frame counter of client is %d", FrameCounter);
+ Error(ERR_RETURN, "frame counter of server is %d", server_frame_counter);
+ Error(ERR_EXIT, "this should not happen -- please debug");
+ }
+
+ /* copy valid player actions */
+ for (i=0; i<MAX_PLAYERS; i++)
+ stored_player[i].effective_action =
+ (i < len - 6 && stored_player[i].active ? buffer[6 + i] : 0);
+
+ network_player_action_received = TRUE;
+}
+
+static void HandleNetworkingMessages()
+{
+ unsigned int message_length;
+
+ while (nread >= 4 && nread >= 4 + readbuffer[3])
+ {
+ message_length = readbuffer[3];
+ if (readbuffer[0] || readbuffer[1] || readbuffer[2])
+ Error(ERR_EXIT, "wrong network server line length");
+
+ memcpy(buffer, &readbuffer[4], message_length);
+ nread -= 4 + message_length;
+ memmove(readbuffer, readbuffer + 4 + message_length, nread);
+
+ switch(buffer[1])
+ {
+ case OP_BAD_PROTOCOL_VERSION:
+ Handle_OP_BAD_PROTOCOL_VERSION();