From 55c07eed597c0e09d88ec0ca73427d8a70c0e391 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Tue, 27 Jun 2023 12:32:45 +0100 Subject: [PATCH] Change: Add separate setting for server sent commands per frame limit (#11023) Set a higher default value for this setting. Use the higher of this and existing commands per frame limit setting for server-originating commands, e.g. GS. This is to support the GSAsyncMode class. This also avoids undue throttling when more than one script is in operation (e.g. AIs). --- src/network/network_command.cpp | 4 ++++ src/settings_type.h | 1 + src/table/settings/network_settings.ini | 9 +++++++++ 3 files changed, 14 insertions(+) diff --git a/src/network/network_command.cpp b/src/network/network_command.cpp index 30b3bde67a..27477ea9a4 100644 --- a/src/network/network_command.cpp +++ b/src/network/network_command.cpp @@ -392,6 +392,10 @@ static void DistributeQueue(CommandQueue *queue, const NetworkClientSocket *owne int to_go = UINT16_MAX; #else int to_go = _settings_client.network.commands_per_frame; + if (owner == nullptr) { + /* This is the server, use the commands_per_frame_server setting if higher */ + to_go = std::max(to_go, _settings_client.network.commands_per_frame_server); + } #endif CommandPacket *cp; diff --git a/src/settings_type.h b/src/settings_type.h index 5b97fa78dc..739d4d8798 100644 --- a/src/settings_type.h +++ b/src/settings_type.h @@ -279,6 +279,7 @@ struct NetworkSettings { uint16 sync_freq; ///< how often do we check whether we are still in-sync uint8 frame_freq; ///< how often do we send commands to the clients uint16 commands_per_frame; ///< how many commands may be sent each frame_freq frames? + uint16 commands_per_frame_server; ///< how many commands may be sent each frame_freq frames? (server-originating commands) uint16 max_commands_in_queue; ///< how many commands may there be in the incoming queue before dropping the connection? uint16 bytes_per_frame; ///< how many bytes may, over a long period, be received per frame? uint16 bytes_per_frame_burst; ///< how many bytes may, over a short period, be received? diff --git a/src/table/settings/network_settings.ini b/src/table/settings/network_settings.ini index 860eb26cec..3ec38ac8e7 100644 --- a/src/table/settings/network_settings.ini +++ b/src/table/settings/network_settings.ini @@ -66,6 +66,15 @@ min = 1 max = 65535 cat = SC_EXPERT +[SDTC_VAR] +var = network.commands_per_frame_server +type = SLE_UINT16 +flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY +def = 16 +min = 1 +max = 65535 +cat = SC_EXPERT + [SDTC_VAR] var = network.max_commands_in_queue type = SLE_UINT16