|
OpenTTD Source 20260108-master-g8ba1860eaa
|
Convert NetworkGameInfo to Packet and back. More...
#include "config.h"#include "core.h"#include "../../newgrf_config.h"#include "../../timer/timer_game_calendar.h"#include "../../timer/timer_game_tick.h"#include "../../landscape_type.h"#include <unordered_map>Go to the source code of this file.
Data Structures | |
| struct | NetworkServerGameInfo |
| The game information that is sent from the server to the client. More... | |
| struct | NetworkGameInfo |
| The game information that is sent from the server to the clients with extra information only required at the client side. More... | |
| struct | NamedGRFIdentifier |
| Container to hold the GRF identifier (GRF ID + MD5 checksum) and the name associated with that NewGRF. More... | |
Typedefs | |
| typedef std::unordered_map< uint32_t, NamedGRFIdentifier > | GameInfoNewGRFLookupTable |
| Lookup table for the GameInfo in case of NST_LOOKUP_ID. | |
Enumerations | |
| enum | NewGRFSerializationType { NST_GRFID_MD5 = 0 , NST_GRFID_MD5_NAME = 1 , NST_LOOKUP_ID = 2 , NST_END } |
| The different types/ways a NewGRF can be serialized in the GameInfo since version 6. More... | |
Functions | |
| std::string_view | GetNetworkRevisionString () |
| Get the network version string used by this build. | |
| 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. | |
| 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. | |
| void | SerializeGRFIdentifier (Packet &p, const GRFIdentifier &grf) |
| Serializes the GRFIdentifier (GRF ID and MD5 checksum) to the packet. | |
| void | DeserializeNetworkGameInfo (Packet &p, NetworkGameInfo &info, const GameInfoNewGRFLookupTable *newgrf_lookup_table=nullptr) |
| Deserializes the NetworkGameInfo struct from the packet. | |
| void | SerializeNetworkGameInfo (Packet &p, const NetworkServerGameInfo &info, bool send_newgrf_names=true) |
| Serializes the NetworkGameInfo struct to the packet. | |
Variables | |
| NetworkServerGameInfo | _network_game_info |
| Information about our game. | |
Convert NetworkGameInfo to Packet and back.
NetworkGameInfo has several revisions which we still need to support on the wire. The table below shows the version and size for each field of the serialized NetworkGameInfo.
Version: Bytes: Description: all 1 the version of this packet's structure
7+ 8 amount of ticks this game has been running unpaused.
6+ 1 type of storage for the NewGRFs below: 0 = NewGRF ID and MD5 checksum. Used as default for version 5 and below, and for later game updates to the Game Coordinator. 1 = NewGRF ID, MD5 checksum and name. Used for direct requests and the first game update to Game Coordinator. 2 = Index in NewGRF lookup table. Used for sending server listing from the Game Coordinator to the clients.
5+ 4 version number of the Game Script (-1 is case none is selected). 5+ var string with the name of the Game Script.
4+ 1 number of GRFs attached (n). 4+ n * var identifiers for GRF files. Consists of: Note: the 'vN' refers to packet version and 'type' refers to the v6+ type of storage for the NewGRFs.
3+ 4 current calendar date in days since 1-1-0 (DMY) 3+ 4 calendar start date in days since 1-1-0 (DMY)
2+ 1 maximum number of companies allowed on the server 2+ 1 number of companies on the server 2+ 1 maximum number of spectators allowed on the server
1+ var string with the name of the server 1+ var string with the revision of the server 1 - 5 1 the language run on the server (0 = any, 1 = English, 2 = German, 3 = French) 1+ 1 whether the server uses a password (0 = no, 1 = yes) 1+ 1 maximum number of clients allowed on the server 1+ 1 number of clients on the server 1+ 1 number of spectators on the server 1 & 2 2 current game date in days since 1-1-1920 (DMY) 1 & 2 2 game introduction date in days since 1-1-1920 (DMY) 1 - 5 var string with the name of the map 1+ 2 width of the map in tiles 1+ 2 height of the map in tiles 1+ 1 type of map: (0 = temperate, 1 = arctic, 2 = desert, 3 = toyland) 1+ 1 whether the server is dedicated (0 = no, 1 = yes)
Definition in file network_game_info.h.
| typedef std::unordered_map<uint32_t, NamedGRFIdentifier> GameInfoNewGRFLookupTable |
Lookup table for the GameInfo in case of NST_LOOKUP_ID.
Definition at line 134 of file network_game_info.h.
The different types/ways a NewGRF can be serialized in the GameInfo since version 6.
Definition at line 85 of file network_game_info.h.
| 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().
| 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().
| 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().
|
extern |
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().