diff options
author | Patric Stout <truebrain@openttd.org> | 2021-02-27 10:54:16 +0100 |
---|---|---|
committer | Patric Stout <github@truebrain.nl> | 2021-02-28 12:27:04 +0100 |
commit | 13889b6554e029554556af6524c9ec5542c593e2 (patch) | |
tree | 5e755da5804ab6228c7a69a5f43a7bfbceb4db8b /src/network/network_server.cpp | |
parent | 8d199b1bbc2f7f0db98b47b709b75ff97b23e730 (diff) | |
download | openttd-13889b6554e029554556af6524c9ec5542c593e2.tar.xz |
Fix: [Network] don't show "server doesn't respond" while in queue
Send all clients in the queue every game-day a packet that they
are still in the queue.
Diffstat (limited to 'src/network/network_server.cpp')
-rw-r--r-- | src/network/network_server.cpp | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/src/network/network_server.cpp b/src/network/network_server.cpp index bef5a5350..9e4d0d88f 100644 --- a/src/network/network_server.cpp +++ b/src/network/network_server.cpp @@ -1873,6 +1873,21 @@ void NetworkServer_Tick(bool send_frame) } break; + case NetworkClientSocket::STATUS_MAP_WAIT: + /* Send every two seconds a packet to the client, to make sure + * he knows the server is still there; just someone else is + * still receiving the map. */ + if (std::chrono::steady_clock::now() > cs->last_packet + std::chrono::seconds(2)) { + cs->SendWait(); + /* We need to reset the timer, as otherwise we will be + * spamming the client. Strictly speaking this variable + * tracks when we last received a packet from the client, + * but as he is waiting, he will not send us any till we + * start sending him data. */ + cs->last_packet = std::chrono::steady_clock::now(); + } + break; + case NetworkClientSocket::STATUS_MAP: /* Downloading the map... this is the amount of time since starting the saving. */ if (lag > _settings_client.network.max_download_time) { @@ -1902,11 +1917,6 @@ void NetworkServer_Tick(bool send_frame) } break; - case NetworkClientSocket::STATUS_MAP_WAIT: - /* This is an internal state where we do not wait - * on the client to move to a different state. */ - break; - case NetworkClientSocket::STATUS_END: /* Bad server/code. */ NOT_REACHED(); |