summaryrefslogtreecommitdiff
path: root/src/network/core
diff options
context:
space:
mode:
authorrubidium42 <rubidium@openttd.org>2021-05-05 19:21:12 +0200
committerrubidium42 <rubidium42@users.noreply.github.com>2021-05-05 21:01:23 +0200
commite7581fd42d9740ca68adfc2ec55edb49d51af237 (patch)
tree51c7a9c14c282e2105e3bf3d298528488eb896e4 /src/network/core
parent72bd62fd705c495d90f08adc964ff8d7f84c6cc1 (diff)
downloadopenttd-e7581fd42d9740ca68adfc2ec55edb49d51af237.tar.xz
Change: [Network] Update server's NetworkServerGameInfo only when needed
Split the updating in a "static" version that only needs to be called when a new map is loaded or some settings are changed, and a "dynamic" version that updates everything that changes regularly such as the current game date or the number of spectators.
Diffstat (limited to 'src/network/core')
-rw-r--r--src/network/core/game_info.cpp13
-rw-r--r--src/network/core/game_info.h1
2 files changed, 11 insertions, 3 deletions
diff --git a/src/network/core/game_info.cpp b/src/network/core/game_info.cpp
index e5e85105e..9f4d23b3b 100644
--- a/src/network/core/game_info.cpp
+++ b/src/network/core/game_info.cpp
@@ -122,10 +122,10 @@ void CheckGameCompatibility(NetworkGameInfo &ngi)
}
/**
- * Get the NetworkServerGameInfo structure with the latest information of the server.
- * @return The current NetworkServerGameInfo.
+ * Fill a NetworkServerGameInfo structure with the static content, or things
+ * that are so static they can be updated on request from a settings change.
*/
-const NetworkServerGameInfo *GetCurrentNetworkServerGameInfo()
+void FillStaticNetworkServerGameInfo()
{
_network_game_info.use_password = !StrEmpty(_settings_client.network.server_password);
_network_game_info.start_date = ConvertYMDToDate(_settings_game.game_creation.starting_year, 0, 1);
@@ -140,7 +140,14 @@ const NetworkServerGameInfo *GetCurrentNetworkServerGameInfo()
strecpy(_network_game_info.server_name, _settings_client.network.server_name, lastof(_network_game_info.server_name));
strecpy(_network_game_info.server_revision, GetNetworkRevisionString(), lastof(_network_game_info.server_revision));
+}
+/**
+ * Get the NetworkServerGameInfo structure with the latest information of the server.
+ * @return The current NetworkServerGameInfo.
+ */
+const NetworkServerGameInfo *GetCurrentNetworkServerGameInfo()
+{
/* Client_on is used as global variable to keep track on the number of clients. */
_network_game_info.companies_on = (byte)Company::GetNumItems();
_network_game_info.spectators_on = NetworkSpectatorCount();
diff --git a/src/network/core/game_info.h b/src/network/core/game_info.h
index 10f922f31..7c84d7b15 100644
--- a/src/network/core/game_info.h
+++ b/src/network/core/game_info.h
@@ -94,6 +94,7 @@ const char *GetNetworkRevisionString();
bool IsNetworkCompatibleVersion(const char *other);
void CheckGameCompatibility(NetworkGameInfo &ngi);
+void FillStaticNetworkServerGameInfo();
const NetworkServerGameInfo *GetCurrentNetworkServerGameInfo();
void DeserializeGRFIdentifier(Packet *p, GRFIdentifier *grf);