Mercurial > hg > openttd
changeset 2861:7c3df848aa3f draft
(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.
author | peter1138 <peter1138@openttd.org> |
---|---|
date | Thu, 19 Jan 2006 17:50:40 +0000 |
parents | 307dde3e41cd |
children | 33c67cbbff90 |
files | misc.c network.c network.h network_udp.c |
diffstat | 4 files changed, 24 insertions(+), 15 deletions(-) [+] |
line wrap: on
line diff
--- a/misc.c +++ b/misc.c @@ -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 +++ b/network.c @@ -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 +++ b/network.h @@ -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 +++ b/network_udp.c @@ -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;