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