(svn r3409) - Change the server advertisement interval to use the frame counter instead
authorpeter1138
Thu, 19 Jan 2006 17:50:40 +0000
changeset 2861 c7e2c8217fed
parent 2860 3166189ae39f
child 2862 84cd00442a31
(svn r3409) - Change the server advertisement interval to use the frame counter instead
of game days. This allows a paused server to continue to advertise itself.
This also fixes advertising for games that start before 1922.
misc.c
network.c
network.h
network_udp.c
--- a/misc.c	Thu Jan 19 16:12:24 2006 +0000
+++ b/misc.c	Thu Jan 19 17:50:40 2006 +0000
@@ -82,7 +82,8 @@
 	_cur_year = ymd.year;
 	_cur_month = ymd.month;
 #ifdef ENABLE_NETWORK
-	_network_last_advertise_date = 0;
+	_network_last_advertise_frame = 0;
+	_network_need_advertise = true;
 #endif /* ENABLE_NETWORK */
 }
 
--- a/network.c	Thu Jan 19 16:12:24 2006 +0000
+++ b/network.c	Thu Jan 19 17:50:40 2006 +0000
@@ -983,7 +983,8 @@
 	if (_network_dedicated) IConsoleCmdExec("exec scripts/on_dedicated.scr 0");
 
 	/* Try to register us to the master server */
-	_network_last_advertise_date = 0;
+	_network_last_advertise_frame = 0;
+	_network_need_advertise = true;
 	NetworkUDPAdvertise();
 	return true;
 }
@@ -1321,7 +1322,8 @@
     // Network is available
 	_network_available = true;
 	_network_dedicated = false;
-	_network_last_advertise_date = 0;
+	_network_last_advertise_frame = 0;
+	_network_need_advertise = true;
 	_network_advertise_retries = 0;
 
 	/* Load the ip from the openttd.cfg */
--- a/network.h	Thu Jan 19 16:12:24 2006 +0000
+++ b/network.h	Thu Jan 19 17:50:40 2006 +0000
@@ -197,7 +197,8 @@
 VARDEF byte _network_lan_internet;
 
 VARDEF bool _network_advertise;
-VARDEF uint16 _network_last_advertise_date;
+VARDEF bool _network_need_advertise;
+VARDEF uint32 _network_last_advertise_frame;
 VARDEF uint8 _network_advertise_retries;
 
 VARDEF bool _network_autoclean_companies;
--- a/network_udp.c	Thu Jan 19 16:12:24 2006 +0000
+++ b/network_udp.c	Thu Jan 19 17:50:40 2006 +0000
@@ -35,9 +35,9 @@
 } PacketUDPType;
 
 enum {
-	ADVERTISE_NORMAL_INTERVAL = 450,	// interval between advertising in days
-	ADVERTISE_RETRY_INTERVAL = 5,			// readvertise when no response after this amount of days
-	ADVERTISE_RETRY_TIMES = 3					// give up readvertising after this much failed retries
+	ADVERTISE_NORMAL_INTERVAL = 30000, // interval between advertising in ticks (15 minutes)
+	ADVERTISE_RETRY_INTERVAL = 300,    // readvertise when no response after this many ticks (9 seconds)
+	ADVERTISE_RETRY_TIMES = 3          // give up readvertising after this much failed retries
 };
 
 #define DEF_UDP_RECEIVE_COMMAND(type) void NetworkPacketReceive_ ## type ## _command(Packet *p, struct sockaddr_in *client_addr)
@@ -611,18 +611,23 @@
 		if (!NetworkUDPListen(&_udp_master_socket, _network_server_bind_ip, 0, false))
 			return;
 
-	/* Only send once in the 450 game-days (about 15 minutes) */
-	if (_network_advertise_retries == 0) {
-		if ( (_network_last_advertise_date + ADVERTISE_NORMAL_INTERVAL) > _date)
+	if (_network_need_advertise) {
+		_network_need_advertise = false;
+		_network_advertise_retries = ADVERTISE_RETRY_TIMES;
+	} else {
+		/* Only send once every ADVERTISE_NORMAL_INTERVAL ticks */
+		if (_network_advertise_retries == 0) {
+			if ((_network_last_advertise_frame + ADVERTISE_NORMAL_INTERVAL) > _frame_counter)
+				return;
+			_network_advertise_retries = ADVERTISE_RETRY_TIMES;
+		}
+
+		if ((_network_last_advertise_frame + ADVERTISE_RETRY_INTERVAL) > _frame_counter)
 			return;
-		_network_advertise_retries = ADVERTISE_RETRY_TIMES;
 	}
 
-	if ( (_network_last_advertise_date + ADVERTISE_RETRY_INTERVAL) > _date)
-		return;
-
 	_network_advertise_retries--;
-	_network_last_advertise_date = _date;
+	_network_last_advertise_frame = _frame_counter;
 
 	/* Find somewhere to send */
 	out_addr.sin_family = AF_INET;