|
OpenTTD Source 20260108-master-g8ba1860eaa
|
Functions to convert NetworkGameInfo to Packet and back. More...
#include "../../stdafx.h"#include "network_game_info.h"#include "../../company_base.h"#include "../../timer/timer_game_calendar.h"#include "../../timer/timer_game_tick.h"#include "../../debug.h"#include "../../map_func.h"#include "../../game/game.hpp"#include "../../game/game_info.hpp"#include "../../settings_type.h"#include "../../string_func.h"#include "../../rev.h"#include "../network_func.h"#include "../network.h"#include "../network_internal.h"#include "packet.h"#include "table/strings.h"#include "../../safeguards.h"Go to the source code of this file.
Functions | |
| std::string_view | GetNetworkRevisionString () |
| Get the network version string used by this build. | |
| static std::string_view | ExtractNetworkRevisionHash (std::string_view revision_string) |
| Extract the git hash from the revision string. | |
| bool | IsNetworkCompatibleVersion (std::string_view other) |
| Checks whether the given version string is compatible with our version. | |
| void | CheckGameCompatibility (NetworkGameInfo &ngi) |
| Check if an game entry is compatible with our client. | |
| void | FillStaticNetworkServerGameInfo () |
| 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 () |
| Get the NetworkServerGameInfo structure with the latest information of the server. | |
| static void | HandleIncomingNetworkGameInfoGRFConfig (GRFConfig &config, std::string_view name) |
| Function that is called for every GRFConfig that is read when receiving a NetworkGameInfo. | |
| void | SerializeNetworkGameInfo (Packet &p, const NetworkServerGameInfo &info, bool send_newgrf_names) |
| Serializes the NetworkGameInfo struct to the packet. | |
| void | DeserializeNetworkGameInfo (Packet &p, NetworkGameInfo &info, const GameInfoNewGRFLookupTable *newgrf_lookup_table) |
| Deserializes the NetworkGameInfo struct from the packet. | |
| void | SerializeGRFIdentifier (Packet &p, const GRFIdentifier &grf) |
| Serializes the GRFIdentifier (GRF ID and MD5 checksum) to the packet. | |
| void | DeserializeGRFIdentifier (Packet &p, GRFIdentifier &grf) |
| Deserializes the GRFIdentifier (GRF ID and MD5 checksum) from the packet. | |
| void | DeserializeGRFIdentifierWithName (Packet &p, NamedGRFIdentifier &grf) |
| Deserializes the NamedGRFIdentifier (GRF ID, MD5 checksum and name) from the packet. | |
Variables | |
| static const uint | GITHASH_SUFFIX_LEN = 12 |
| How many hex digits of the git hash to include in network revision string. | |
| NetworkServerGameInfo | _network_game_info |
| Information about our game. | |
Functions to convert NetworkGameInfo to Packet and back.
Definition in file network_game_info.cpp.
| void CheckGameCompatibility | ( | NetworkGameInfo & | ngi | ) |
Check if an game entry is compatible with our client.
Definition at line 124 of file network_game_info.cpp.
References NetworkGameInfo::compatible, GCS_NOT_FOUND, NetworkServerGameInfo::grfconfig, IsNetworkCompatibleVersion(), NetworkServerGameInfo::server_revision, and NetworkGameInfo::version_compatible.
Referenced by ClientNetworkCoordinatorSocketHandler::Receive_GC_LISTING(), and QueryNetworkGameSocketHandler::Receive_SERVER_GAME_INFO().
| void DeserializeGRFIdentifier | ( | Packet & | p, |
| GRFIdentifier & | grf | ||
| ) |
Deserializes the GRFIdentifier (GRF ID and MD5 checksum) from the packet.
| p | the packet to read the data from. |
| grf | the GRFIdentifier to deserialize. |
Definition at line 395 of file network_game_info.cpp.
References GRFIdentifier::grfid, GRFIdentifier::md5sum, Packet::Recv_bytes(), and Packet::Recv_uint32().
Referenced by DeserializeGRFIdentifierWithName(), DeserializeNetworkGameInfo(), and ClientNetworkGameSocketHandler::Receive_SERVER_CHECK_NEWGRFS().
| void DeserializeGRFIdentifierWithName | ( | Packet & | p, |
| NamedGRFIdentifier & | grf | ||
| ) |
Deserializes the NamedGRFIdentifier (GRF ID, MD5 checksum and name) from the packet.
| p | the packet to read the data from. |
| grf | the NamedGRFIdentifier to deserialize. |
Definition at line 406 of file network_game_info.cpp.
References DeserializeGRFIdentifier(), NamedGRFIdentifier::ident, NamedGRFIdentifier::name, NETWORK_GRF_NAME_LENGTH, and Packet::Recv_string().
Referenced by DeserializeNetworkGameInfo(), and ClientNetworkCoordinatorSocketHandler::Receive_GC_NEWGRF_LOOKUP().
| void DeserializeNetworkGameInfo | ( | Packet & | p, |
| NetworkGameInfo & | info, | ||
| const GameInfoNewGRFLookupTable * | newgrf_lookup_table | ||
| ) |
Deserializes the NetworkGameInfo struct from the packet.
| p | the packet to read the data from. |
| info | the NetworkGameInfo to deserialize into. |
Definition at line 271 of file network_game_info.cpp.
References NetworkServerGameInfo::calendar_date, NetworkServerGameInfo::calendar_start, Clamp(), NetworkServerGameInfo::clients_max, NetworkServerGameInfo::clients_on, NetworkServerGameInfo::companies_max, NetworkServerGameInfo::companies_on, Ticks::DAY_TICKS, TimerGameConst< struct Calendar >::DAYS_TILL_ORIGINAL_BASE_YEAR, NetworkServerGameInfo::dedicated, DeserializeGRFIdentifier(), DeserializeGRFIdentifierWithName(), NetworkServerGameInfo::gamescript_name, NetworkServerGameInfo::gamescript_version, NetworkServerGameInfo::grfconfig, HandleIncomingNetworkGameInfoGRFConfig(), NamedGRFIdentifier::ident, NetworkServerGameInfo::landscape, NetworkServerGameInfo::map_height, NetworkServerGameInfo::map_width, TimerGameConst< struct Calendar >::MAX_DATE, NamedGRFIdentifier::name, NETWORK_MAX_GRF_COUNT, NETWORK_NAME_LENGTH, NETWORK_REVISION_LENGTH, NST_END, NST_GRFID_MD5, NST_GRFID_MD5_NAME, NST_LOOKUP_ID, Packet::Recv_bool(), Packet::Recv_string(), Packet::Recv_uint16(), Packet::Recv_uint32(), Packet::Recv_uint64(), Packet::Recv_uint8(), NetworkServerGameInfo::server_name, NetworkServerGameInfo::server_revision, NetworkServerGameInfo::spectators_on, NetworkServerGameInfo::ticks_playing, to_underlying(), and NetworkServerGameInfo::use_password.
Referenced by ClientNetworkCoordinatorSocketHandler::Receive_GC_LISTING(), and QueryNetworkGameSocketHandler::Receive_SERVER_GAME_INFO().
|
static |
Extract the git hash from the revision string.
| revision_string | The revision string (formatted as DATE-BRANCH-GITHASH). |
Definition at line 90 of file network_game_info.cpp.
Referenced by IsNetworkCompatibleVersion().
| void FillStaticNetworkServerGameInfo | ( | ) |
Fill a NetworkServerGameInfo structure with the static content, or things that are so static they can be updated on request from a settings change.
Definition at line 140 of file network_game_info.cpp.
References _grfconfig, _network_dedicated, _network_game_info, _settings_client, _settings_game, NetworkServerGameInfo::calendar_start, NetworkServerGameInfo::clients_max, NetworkServerGameInfo::companies_max, TimerGameCalendar::ConvertYMDToDate(), CopyGRFConfigList(), NetworkServerGameInfo::dedicated, GameSettings::game_creation, GetNetworkRevisionString(), NetworkServerGameInfo::grfconfig, NetworkServerGameInfo::landscape, GameCreationSettings::landscape, NetworkServerGameInfo::map_height, NetworkServerGameInfo::map_width, NetworkSettings::max_clients, NetworkSettings::max_companies, ClientSettings::network, NetworkServerGameInfo::server_name, NetworkSettings::server_name, NetworkSettings::server_password, NetworkServerGameInfo::server_revision, Map::SizeX(), Map::SizeY(), GameCreationSettings::starting_year, and NetworkServerGameInfo::use_password.
Referenced by NetworkServerUpdateGameInfo().
| const NetworkServerGameInfo & GetCurrentNetworkServerGameInfo | ( | ) |
Get the NetworkServerGameInfo structure with the latest information of the server.
Definition at line 160 of file network_game_info.cpp.
References _network_game_info, NetworkServerGameInfo::calendar_date, NetworkServerGameInfo::companies_on, TimerGameTick::counter, TimerGameCalendar::date, Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem<&_company_pool >::GetNumItems(), NetworkServerGameInfo::spectators_on, and NetworkServerGameInfo::ticks_playing.
Referenced by ServerNetworkGameSocketHandler::SendGameInfo(), and ClientNetworkCoordinatorSocketHandler::SendServerUpdate().
| std::string_view GetNetworkRevisionString | ( | ) |
Get the network version string used by this build.
The returned string is guaranteed to be at most NETWORK_REVISION_LENGTH bytes including '\0' terminator.
Definition at line 44 of file network_game_info.cpp.
References Debug, GITHASH_SUFFIX_LEN, and NETWORK_REVISION_LENGTH.
Referenced by FillStaticNetworkServerGameInfo(), IsNetworkCompatibleVersion(), NetworkHTTPInitialize(), ClientNetworkGameSocketHandler::SendJoin(), and ServerNetworkAdminSocketHandler::SendWelcome().
|
static |
Function that is called for every GRFConfig that is read when receiving a NetworkGameInfo.
Only grfid and md5sum are set, the rest is zero. This function must set all appropriate fields. This GRF is later appended to the grfconfig list of the NetworkGameInfo.
| config | The GRF to handle. |
| name | The name of the NewGRF, empty when unknown. |
Definition at line 182 of file network_game_info.cpp.
References AddGRFTextToList(), Copy, FGCM_EXACT, GRFConfig::filename, FindGRFConfig(), GRFConfig::flags, GCS_NOT_FOUND, GetString(), GRFIdentifier::grfid, GRFConfig::ident, GRFConfig::info, GRFIdentifier::md5sum, GRFConfig::name, BaseBitSet< Timpl, Tvalue_type, Tstorage, Tmask >::Set(), GRFConfig::status, and GRFConfig::url.
Referenced by DeserializeNetworkGameInfo().
| bool IsNetworkCompatibleVersion | ( | std::string_view | other | ) |
Checks whether the given version string is compatible with our version.
First tries to match the full string, if that fails, attempts to compare just git hashes.
| other | the version string to compare to |
Definition at line 102 of file network_game_info.cpp.
References ExtractNetworkRevisionHash(), and GetNetworkRevisionString().
Referenced by CheckGameCompatibility(), and ServerNetworkGameSocketHandler::Receive_CLIENT_JOIN().
| void SerializeGRFIdentifier | ( | Packet & | p, |
| const GRFIdentifier & | grf | ||
| ) |
Serializes the GRFIdentifier (GRF ID and MD5 checksum) to the packet.
| p | the packet to write the data to. |
| grf | the GRFIdentifier to serialize. |
Definition at line 384 of file network_game_info.cpp.
References GRFIdentifier::grfid, GRFIdentifier::md5sum, Packet::Send_bytes(), and Packet::Send_uint32().
Referenced by ServerNetworkGameSocketHandler::SendNewGRFCheck(), and SerializeNetworkGameInfo().
| void SerializeNetworkGameInfo | ( | Packet & | p, |
| const NetworkServerGameInfo & | info, | ||
| bool | send_newgrf_names | ||
| ) |
Serializes the NetworkGameInfo struct to the packet.
| p | the packet to write the data to. |
| info | the NetworkGameInfo struct to serialize from. |
Definition at line 203 of file network_game_info.cpp.
References NetworkServerGameInfo::calendar_date, NetworkServerGameInfo::calendar_start, NetworkServerGameInfo::clients_max, NetworkServerGameInfo::clients_on, NetworkServerGameInfo::companies_max, NetworkServerGameInfo::companies_on, NetworkServerGameInfo::dedicated, Game::GetInfo(), ScriptInfo::GetName(), ScriptInfo::GetVersion(), NetworkServerGameInfo::grfconfig, NetworkServerGameInfo::landscape, NetworkServerGameInfo::map_height, NetworkServerGameInfo::map_width, NETWORK_GAME_INFO_VERSION, NST_GRFID_MD5, NST_GRFID_MD5_NAME, Packet::Send_bool(), Packet::Send_string(), Packet::Send_uint16(), Packet::Send_uint32(), Packet::Send_uint64(), Packet::Send_uint8(), SerializeGRFIdentifier(), NetworkServerGameInfo::server_name, NetworkServerGameInfo::server_revision, NetworkServerGameInfo::spectators_on, Static, NetworkServerGameInfo::ticks_playing, to_underlying(), and NetworkServerGameInfo::use_password.
Referenced by ServerNetworkGameSocketHandler::SendGameInfo(), and ClientNetworkCoordinatorSocketHandler::SendServerUpdate().
| NetworkServerGameInfo _network_game_info |
Information about our game.
Definition at line 38 of file network_game_info.cpp.
Referenced by ServerNetworkGameSocketHandler::CloseConnection(), FillStaticNetworkServerGameInfo(), GetCurrentNetworkServerGameInfo(), NetworkStartUp(), ServerNetworkGameSocketHandler::Receive_CLIENT_JOIN(), and ServerNetworkGameSocketHandler::SendWelcome().
|
static |
How many hex digits of the git hash to include in network revision string.
Determined as 10 hex digits + 2 characters for -g/-u/-m prefix.
Definition at line 36 of file network_game_info.cpp.
Referenced by GetNetworkRevisionString().