summaryrefslogtreecommitdiff
path: root/src/network/network_udp.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/network/network_udp.cpp')
-rw-r--r--src/network/network_udp.cpp24
1 files changed, 8 insertions, 16 deletions
diff --git a/src/network/network_udp.cpp b/src/network/network_udp.cpp
index 771f51fbe..99939fab4 100644
--- a/src/network/network_udp.cpp
+++ b/src/network/network_udp.cpp
@@ -39,8 +39,8 @@ static std::mutex _network_udp_mutex;
/** Session key to register ourselves to the master server */
static uint64 _session_key = 0;
-static const uint32 ADVERTISE_NORMAL_INTERVAL = 15 * 60 * 1000; ///< interval between advertising in ms (15 minutes)
-static const uint32 ADVERTISE_RETRY_INTERVAL = 10 * 1000; ///< re-advertise when no response after this many ms (10 seconds)
+static const std::chrono::minutes ADVERTISE_NORMAL_INTERVAL(15); ///< interval between advertising.
+static const std::chrono::seconds ADVERTISE_RETRY_INTERVAL(10); ///< re-advertise when no response after this amount of time.
static const uint32 ADVERTISE_RETRY_TIMES = 3; ///< give up re-advertising after this much failed retries
NetworkUDPSocketHandler *_udp_client_socket = nullptr; ///< udp client socket
@@ -570,37 +570,29 @@ static void NetworkUDPAdvertiseThread()
*/
void NetworkUDPAdvertise()
{
- static uint32 _last_advertisement = 0; ///< The time of the last advertisement (used to check for wrapping of time)
- static uint32 _next_advertisement = 0; ///< The next time we should perform a normal advertisement.
- static uint32 _next_retry = 0; ///< The next time we should perform a retry of an advertisement.
+ static std::chrono::steady_clock::time_point _last_advertisement = {}; ///< The last time we performed an advertisement.
/* Check if we should send an advertise */
if (!_networking || !_network_server || !_network_udp_server || !_settings_client.network.server_advertise) return;
- if (_network_need_advertise || _realtime_tick < _last_advertisement) {
- /* Forced advertisement, or a wrapping of time in which case we determine the advertisement/retry times again. */
+ if (_network_need_advertise) {
+ /* Forced advertisement. */
_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 (_realtime_tick <= _next_advertisement) return;
+ if (std::chrono::steady_clock::now() <= _last_advertisement + ADVERTISE_NORMAL_INTERVAL) return;
_network_advertise_retries = ADVERTISE_RETRY_TIMES;
} else {
/* An actual retry. */
- if (_realtime_tick <= _next_retry) return;
+ if (std::chrono::steady_clock::now() <= _last_advertisement + ADVERTISE_RETRY_INTERVAL) return;
}
}
_network_advertise_retries--;
- _last_advertisement = _realtime_tick;
- _next_advertisement = _realtime_tick + ADVERTISE_NORMAL_INTERVAL;
- _next_retry = _realtime_tick + ADVERTISE_RETRY_INTERVAL;
-
- /* Make sure we do not have an overflow when checking these; when time wraps, we simply force an advertisement. */
- if (_next_advertisement < _last_advertisement) _next_advertisement = UINT32_MAX;
- if (_next_retry < _last_advertisement) _next_retry = UINT32_MAX;
+ _last_advertisement = std::chrono::steady_clock::now();
if (!StartNewThread(nullptr, "ottd:udp-advert", &NetworkUDPAdvertiseThread)) {
NetworkUDPAdvertiseThread();