From 0d2751a54ef34fe353386efadd6f0b07b99d4ffc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Janiszewski?= Date: Mon, 19 Nov 2018 23:10:54 +0100 Subject: [PATCH] Hide the network class declaration to Network.cpp (#8276) The Network class is not used by anyone other than free functions in Network.cpp, nor should it be used by anyone with the current design. This change leaves only the publicly-exposed functions left in the header, drastically reducing amount of required headers in network.h, one of the heaviest headers we had so far. --- src/openrct2-ui/windows/Cheats.cpp | 1 + src/openrct2-ui/windows/Multiplayer.cpp | 1 + src/openrct2-ui/windows/ServerList.cpp | 1 + src/openrct2-ui/windows/TopToolbar.cpp | 1 + src/openrct2/GameState.cpp | 1 + src/openrct2/network/Network.cpp | 260 +++++++++++++++- src/openrct2/network/NetworkConnection.cpp | 1 + .../network/NetworkServerAdvertiser.cpp | 1 + src/openrct2/network/NetworkTypes.h | 20 ++ src/openrct2/network/network.h | 288 +----------------- src/openrct2/title/TitleScreen.cpp | 1 + src/openrct2/world/Balloon.cpp | 1 + src/openrct2/world/SmallScenery.cpp | 1 + 13 files changed, 288 insertions(+), 290 deletions(-) diff --git a/src/openrct2-ui/windows/Cheats.cpp b/src/openrct2-ui/windows/Cheats.cpp index bb43db1c33..48da3dbdc9 100644 --- a/src/openrct2-ui/windows/Cheats.cpp +++ b/src/openrct2-ui/windows/Cheats.cpp @@ -12,6 +12,7 @@ #include #include #include +#include #include #include #include diff --git a/src/openrct2-ui/windows/Multiplayer.cpp b/src/openrct2-ui/windows/Multiplayer.cpp index 007aa98828..f23badc286 100644 --- a/src/openrct2-ui/windows/Multiplayer.cpp +++ b/src/openrct2-ui/windows/Multiplayer.cpp @@ -10,6 +10,7 @@ #include #include #include +#include #include #include #include diff --git a/src/openrct2-ui/windows/ServerList.cpp b/src/openrct2-ui/windows/ServerList.cpp index f24357b71f..64bbd8146c 100644 --- a/src/openrct2-ui/windows/ServerList.cpp +++ b/src/openrct2-ui/windows/ServerList.cpp @@ -15,6 +15,7 @@ #include #include #include +#include #include #include #include diff --git a/src/openrct2-ui/windows/TopToolbar.cpp b/src/openrct2-ui/windows/TopToolbar.cpp index 8841824732..5d5c5e5b1a 100644 --- a/src/openrct2-ui/windows/TopToolbar.cpp +++ b/src/openrct2-ui/windows/TopToolbar.cpp @@ -20,6 +20,7 @@ #include #include #include +#include #include #include #include diff --git a/src/openrct2/GameState.cpp b/src/openrct2/GameState.cpp index 31909657c6..b48026b6b0 100644 --- a/src/openrct2/GameState.cpp +++ b/src/openrct2/GameState.cpp @@ -11,6 +11,7 @@ #include "Context.h" #include "Editor.h" +#include "Game.h" #include "Input.h" #include "OpenRCT2.h" #include "interface/Screenshot.h" diff --git a/src/openrct2/network/Network.cpp b/src/openrct2/network/Network.cpp index c003091d76..effd232be1 100644 --- a/src/openrct2/network/Network.cpp +++ b/src/openrct2/network/Network.cpp @@ -10,6 +10,7 @@ #include "network.h" #include "../Context.h" +#include "../Game.h" #include "../OpenRCT2.h" #include "../PlatformEnvironment.h" #include "../core/Guard.hpp" @@ -37,14 +38,15 @@ static int32_t _pickup_peep_old_x = LOCATION_NULL; #ifndef DISABLE_NETWORK # include "../Cheats.h" -# include "../Game.h" # include "../ParkImporter.h" +# include "../Version.h" # include "../actions/GameAction.h" # include "../config/Config.h" # include "../core/Console.hpp" # include "../core/FileStream.hpp" # include "../core/Json.hpp" # include "../core/MemoryStream.h" +# include "../core/Nullable.hpp" # include "../core/Path.hpp" # include "../core/String.hpp" # include "../core/Util.hpp" @@ -59,31 +61,279 @@ static int32_t _pickup_peep_old_x = LOCATION_NULL; # include "../util/Util.h" # include "../world/Park.h" # include "NetworkAction.h" +# include "NetworkConnection.h" +# include "NetworkGroup.h" +# include "NetworkKey.h" +# include "NetworkPacket.h" +# include "NetworkPlayer.h" +# include "NetworkServerAdvertiser.h" +# include "NetworkUser.h" +# include "TcpSocket.h" # include +# include # include # include +# include +# include +# include +# include +# include # include # include +# include # pragma comment(lib, "Ws2_32.lib") using namespace OpenRCT2; -static Network gNetwork; - enum { SERVER_EVENT_PLAYER_JOINED, SERVER_EVENT_PLAYER_DISCONNECTED, }; -void network_chat_show_connected_message(); -void network_chat_show_server_greeting(); +enum +{ + NETWORK_TICK_FLAG_CHECKSUMS = 1 << 0, +}; + +static void network_chat_show_connected_message(); +static void network_chat_show_server_greeting(); static void network_get_keys_directory(utf8* buffer, size_t bufferSize); static void network_get_private_key_path(utf8* buffer, size_t bufferSize, const utf8* playerName); static void network_get_public_key_path(utf8* buffer, size_t bufferSize, const utf8* playerName, const utf8* hash); +class Network +{ +public: + Network(); + ~Network(); + void SetEnvironment(const std::shared_ptr& env); + bool Init(); + void Close(); + bool BeginClient(const char* host, uint16_t port); + bool BeginServer(uint16_t port, const char* address); + int32_t GetMode(); + int32_t GetStatus(); + int32_t GetAuthStatus(); + uint32_t GetServerTick(); + uint8_t GetPlayerID(); + void Update(); + void Flush(); + void ProcessGameCommandQueue(); + void EnqueueGameAction(const GameAction* action); + std::vector>::iterator GetPlayerIteratorByID(uint8_t id); + NetworkPlayer* GetPlayerByID(uint8_t id); + std::vector>::iterator GetGroupIteratorByID(uint8_t id); + NetworkGroup* GetGroupByID(uint8_t id); + static const char* FormatChat(NetworkPlayer* fromplayer, const char* text); + void SendPacketToClients(NetworkPacket& packet, bool front = false, bool gameCmd = false); + bool CheckSRAND(uint32_t tick, uint32_t srand0); + void CheckDesynchronizaton(); + void KickPlayer(int32_t playerId); + void SetPassword(const char* password); + void ShutdownClient(); + NetworkGroup* AddGroup(); + void RemoveGroup(uint8_t id); + uint8_t GetDefaultGroup(); + uint8_t GetGroupIDByHash(const std::string& keyhash); + void SetDefaultGroup(uint8_t id); + void SaveGroups(); + void LoadGroups(); + + std::string BeginLog(const std::string& directory, const std::string& midName, const std::string& filenameFormat); + void AppendLog(std::ostream& fs, const std::string& s); + + void BeginChatLog(); + void AppendChatLog(const std::string& s); + void CloseChatLog(); + + void BeginServerLog(); + void AppendServerLog(const std::string& s); + void CloseServerLog(); + + void Client_Send_TOKEN(); + void Client_Send_AUTH(const char* name, const char* password, const char* pubkey, const char* sig, size_t sigsize); + void Server_Send_AUTH(NetworkConnection& connection); + void Server_Send_TOKEN(NetworkConnection& connection); + void Server_Send_MAP(NetworkConnection* connection = nullptr); + void Client_Send_CHAT(const char* text); + void Server_Send_CHAT(const char* text); + void Client_Send_GAMECMD( + uint32_t eax, uint32_t ebx, uint32_t ecx, uint32_t edx, uint32_t esi, uint32_t edi, uint32_t ebp, uint8_t callback); + void Server_Send_GAMECMD( + uint32_t eax, uint32_t ebx, uint32_t ecx, uint32_t edx, uint32_t esi, uint32_t edi, uint32_t ebp, uint8_t playerid, + uint8_t callback); + void Client_Send_GAME_ACTION(const GameAction* action); + void Server_Send_GAME_ACTION(const GameAction* action); + void Server_Send_TICK(); + void Server_Send_PLAYERLIST(); + void Client_Send_PING(); + void Server_Send_PING(); + void Server_Send_PINGLIST(); + void Server_Send_SETDISCONNECTMSG(NetworkConnection& connection, const char* msg); + void Server_Send_GAMEINFO(NetworkConnection& connection); + void Server_Send_SHOWERROR(NetworkConnection& connection, rct_string_id title, rct_string_id message); + void Server_Send_GROUPLIST(NetworkConnection& connection); + void Server_Send_EVENT_PLAYER_JOINED(const char* playerName); + void Server_Send_EVENT_PLAYER_DISCONNECTED(const char* playerName, const char* reason); + void Client_Send_GAMEINFO(); + void Client_Send_OBJECTS(const std::vector& objects); + void Server_Send_OBJECTS(NetworkConnection& connection, const std::vector& objects) const; + + std::vector> player_list; + std::vector> group_list; + NetworkKey _key; + std::vector _challenge; + std::map _gameActionCallbacks; + NetworkUserManager _userManager; + + std::string ServerName; + std::string ServerDescription; + std::string ServerGreeting; + std::string ServerProviderName; + std::string ServerProviderEmail; + std::string ServerProviderWebsite; + +private: + void CloseConnection(); + + bool ProcessConnection(NetworkConnection& connection); + void ProcessPacket(NetworkConnection& connection, NetworkPacket& packet); + void AddClient(ITcpSocket* socket); + void RemoveClient(std::unique_ptr& connection); + NetworkPlayer* AddPlayer(const utf8* name, const std::string& keyhash); + std::string MakePlayerNameUnique(const std::string& name); + + const char* GetMasterServerUrl(); + std::string GenerateAdvertiseKey(); + void SetupDefaultGroups(); + + bool LoadMap(IStream* stream); + bool SaveMap(IStream* stream, const std::vector& objects) const; + + struct GameCommand + { + GameCommand(uint32_t t, uint32_t* args, uint8_t p, uint8_t cb, uint32_t id) + { + tick = t; + eax = args[0]; + ebx = args[1]; + ecx = args[2]; + edx = args[3]; + esi = args[4]; + edi = args[5]; + ebp = args[6]; + playerid = p; + callback = cb; + action = nullptr; + commandIndex = id; + } + + GameCommand(uint32_t t, std::unique_ptr&& ga, uint32_t id) + { + tick = t; + action = std::move(ga); + commandIndex = id; + } + + ~GameCommand() + { + } + + uint32_t tick = 0; + uint32_t eax = 0, ebx = 0, ecx = 0, edx = 0, esi = 0, edi = 0, ebp = 0; + GameAction::Ptr action; + uint8_t playerid = 0; + uint8_t callback = 0; + uint32_t commandIndex = 0; + bool operator<(const GameCommand& comp) const + { + // First sort by tick + if (tick < comp.tick) + return true; + if (tick > comp.tick) + return false; + + // If the ticks are equal sort by commandIndex + return commandIndex < comp.commandIndex; + } + }; + + int32_t mode = NETWORK_MODE_NONE; + int32_t status = NETWORK_STATUS_NONE; + bool _closeLock = false; + bool _requireClose = false; + bool wsa_initialized = false; + ITcpSocket* listening_socket = nullptr; + uint16_t listening_port = 0; + NetworkConnection* server_connection = nullptr; + SOCKET_STATUS _lastConnectStatus = SOCKET_STATUS_CLOSED; + uint32_t last_tick_sent_time = 0; + uint32_t last_ping_sent_time = 0; + uint32_t server_tick = 0; + uint32_t server_srand0 = 0; + uint32_t server_srand0_tick = 0; + std::string server_sprite_hash; + uint8_t player_id = 0; + std::list> client_connection_list; + std::multiset game_command_queue; + std::vector chunk_buffer; + std::string _password; + bool _desynchronised = false; + INetworkServerAdvertiser* _advertiser = nullptr; + uint32_t server_connect_time = 0; + uint8_t default_group = 0; + uint32_t game_commands_processed_this_tick = 0; + uint32_t _commandId; + uint32_t _actionId; + std::string _chatLogPath; + std::string _chatLogFilenameFormat = "%Y%m%d-%H%M%S.txt"; + std::string _serverLogPath; + std::string _serverLogFilenameFormat = "%Y%m%d-%H%M%S.txt"; + std::shared_ptr _env; + + void UpdateServer(); + void UpdateClient(); + +private: + std::vector client_command_handlers; + std::vector server_command_handlers; + void Client_Handle_AUTH(NetworkConnection& connection, NetworkPacket& packet); + void Server_Handle_AUTH(NetworkConnection& connection, NetworkPacket& packet); + void Server_Client_Joined(const char* name, const std::string& keyhash, NetworkConnection& connection); + void Client_Handle_MAP(NetworkConnection& connection, NetworkPacket& packet); + void Client_Handle_CHAT(NetworkConnection& connection, NetworkPacket& packet); + void Server_Handle_CHAT(NetworkConnection& connection, NetworkPacket& packet); + void Client_Handle_GAMECMD(NetworkConnection& connection, NetworkPacket& packet); + void Server_Handle_GAMECMD(NetworkConnection& connection, NetworkPacket& packet); + void Client_Handle_GAME_ACTION(NetworkConnection& connection, NetworkPacket& packet); + void Server_Handle_GAME_ACTION(NetworkConnection& connection, NetworkPacket& packet); + void Client_Handle_TICK(NetworkConnection& connection, NetworkPacket& packet); + void Client_Handle_PLAYERLIST(NetworkConnection& connection, NetworkPacket& packet); + void Client_Handle_PING(NetworkConnection& connection, NetworkPacket& packet); + void Server_Handle_PING(NetworkConnection& connection, NetworkPacket& packet); + void Client_Handle_PINGLIST(NetworkConnection& connection, NetworkPacket& packet); + void Client_Handle_SETDISCONNECTMSG(NetworkConnection& connection, NetworkPacket& packet); + void Client_Handle_GAMEINFO(NetworkConnection& connection, NetworkPacket& packet); + void Server_Handle_GAMEINFO(NetworkConnection& connection, NetworkPacket& packet); + void Client_Handle_SHOWERROR(NetworkConnection& connection, NetworkPacket& packet); + void Client_Handle_GROUPLIST(NetworkConnection& connection, NetworkPacket& packet); + void Client_Handle_EVENT(NetworkConnection& connection, NetworkPacket& packet); + void Client_Handle_TOKEN(NetworkConnection& connection, NetworkPacket& packet); + void Server_Handle_TOKEN(NetworkConnection& connection, NetworkPacket& packet); + void Client_Handle_OBJECTS(NetworkConnection& connection, NetworkPacket& packet); + void Server_Handle_OBJECTS(NetworkConnection& connection, NetworkPacket& packet); + + uint8_t* save_for_network(size_t& out_size, const std::vector& objects) const; + + std::ofstream _chat_log_fs; + std::ofstream _server_log_fs; +}; + +static Network gNetwork; + Network::Network() { wsa_initialized = false; diff --git a/src/openrct2/network/NetworkConnection.cpp b/src/openrct2/network/NetworkConnection.cpp index 2031246adf..f8ce9c1db5 100644 --- a/src/openrct2/network/NetworkConnection.cpp +++ b/src/openrct2/network/NetworkConnection.cpp @@ -14,6 +14,7 @@ # include "../core/String.hpp" # include "../localisation/Localisation.h" # include "../platform/platform.h" +# include "TcpSocket.h" # include "network.h" constexpr size_t NETWORK_DISCONNECT_REASON_BUFFER_SIZE = 256; diff --git a/src/openrct2/network/NetworkServerAdvertiser.cpp b/src/openrct2/network/NetworkServerAdvertiser.cpp index f0f559fe6f..1064b1da17 100644 --- a/src/openrct2/network/NetworkServerAdvertiser.cpp +++ b/src/openrct2/network/NetworkServerAdvertiser.cpp @@ -13,6 +13,7 @@ # include "../config/Config.h" # include "../core/Console.hpp" +# include "../core/Json.hpp" # include "../core/String.hpp" # include "../core/Util.hpp" # include "../localisation/Date.h" diff --git a/src/openrct2/network/NetworkTypes.h b/src/openrct2/network/NetworkTypes.h index d3c1a040c6..fdbfe0f8fa 100644 --- a/src/openrct2/network/NetworkTypes.h +++ b/src/openrct2/network/NetworkTypes.h @@ -12,6 +12,26 @@ #include "../common.h" #include "../core/Endianness.h" +enum +{ + NETWORK_MODE_NONE, + NETWORK_MODE_CLIENT, + NETWORK_MODE_SERVER +}; + +enum +{ + NETWORK_PLAYER_FLAG_ISSERVER = 1 << 0, +}; + +enum +{ + NETWORK_STATUS_NONE, + NETWORK_STATUS_READY, + NETWORK_STATUS_CONNECTING, + NETWORK_STATUS_CONNECTED +}; + enum NETWORK_AUTH { NETWORK_AUTH_NONE, diff --git a/src/openrct2/network/network.h b/src/openrct2/network/network.h index b9649aa238..6a06ec9cb1 100644 --- a/src/openrct2/network/network.h +++ b/src/openrct2/network/network.h @@ -9,38 +9,16 @@ #pragma once -#include -#include - -enum -{ - NETWORK_MODE_NONE, - NETWORK_MODE_CLIENT, - NETWORK_MODE_SERVER -}; - -enum -{ - NETWORK_PLAYER_FLAG_ISSERVER = 1 << 0, -}; - -enum -{ - NETWORK_STATUS_NONE, - NETWORK_STATUS_READY, - NETWORK_STATUS_CONNECTING, - NETWORK_STATUS_CONNECTED -}; - #define NETWORK_DEFAULT_PORT 11753 #define MAX_SERVER_DESCRIPTION_LENGTH 256 -#include "../Game.h" -#include "../Version.h" #include "../common.h" #include "../localisation/StringIds.h" #include "NetworkTypes.h" +#include +#include + struct GameAction; struct rct_peep; struct LocationXYZ16; @@ -50,266 +28,6 @@ namespace OpenRCT2 interface IPlatformEnvironment; } -#ifndef DISABLE_NETWORK - -# include "../actions/GameAction.h" -# include "../core/Json.hpp" -# include "../core/MemoryStream.h" -# include "../core/Nullable.hpp" -# include "NetworkConnection.h" -# include "NetworkGroup.h" -# include "NetworkKey.h" -# include "NetworkPacket.h" -# include "NetworkPlayer.h" -# include "NetworkServerAdvertiser.h" -# include "NetworkUser.h" -# include "TcpSocket.h" - -# include -# include -# include -# include -# include -# include -# include - -enum -{ - NETWORK_TICK_FLAG_CHECKSUMS = 1 << 0, -}; - -struct ObjectRepositoryItem; - -class Network -{ -public: - Network(); - ~Network(); - void SetEnvironment(const std::shared_ptr& env); - bool Init(); - void Close(); - bool BeginClient(const char* host, uint16_t port); - bool BeginServer(uint16_t port, const char* address); - int32_t GetMode(); - int32_t GetStatus(); - int32_t GetAuthStatus(); - uint32_t GetServerTick(); - uint8_t GetPlayerID(); - void Update(); - void Flush(); - void ProcessGameCommandQueue(); - void EnqueueGameAction(const GameAction* action); - std::vector>::iterator GetPlayerIteratorByID(uint8_t id); - NetworkPlayer* GetPlayerByID(uint8_t id); - std::vector>::iterator GetGroupIteratorByID(uint8_t id); - NetworkGroup* GetGroupByID(uint8_t id); - static const char* FormatChat(NetworkPlayer* fromplayer, const char* text); - void SendPacketToClients(NetworkPacket& packet, bool front = false, bool gameCmd = false); - bool CheckSRAND(uint32_t tick, uint32_t srand0); - void CheckDesynchronizaton(); - void KickPlayer(int32_t playerId); - void SetPassword(const char* password); - void ShutdownClient(); - NetworkGroup* AddGroup(); - void RemoveGroup(uint8_t id); - uint8_t GetDefaultGroup(); - uint8_t GetGroupIDByHash(const std::string& keyhash); - void SetDefaultGroup(uint8_t id); - void SaveGroups(); - void LoadGroups(); - - std::string BeginLog(const std::string& directory, const std::string& midName, const std::string& filenameFormat); - void AppendLog(std::ostream& fs, const std::string& s); - - void BeginChatLog(); - void AppendChatLog(const std::string& s); - void CloseChatLog(); - - void BeginServerLog(); - void AppendServerLog(const std::string& s); - void CloseServerLog(); - - void Client_Send_TOKEN(); - void Client_Send_AUTH(const char* name, const char* password, const char* pubkey, const char* sig, size_t sigsize); - void Server_Send_AUTH(NetworkConnection& connection); - void Server_Send_TOKEN(NetworkConnection& connection); - void Server_Send_MAP(NetworkConnection* connection = nullptr); - void Client_Send_CHAT(const char* text); - void Server_Send_CHAT(const char* text); - void Client_Send_GAMECMD( - uint32_t eax, uint32_t ebx, uint32_t ecx, uint32_t edx, uint32_t esi, uint32_t edi, uint32_t ebp, uint8_t callback); - void Server_Send_GAMECMD( - uint32_t eax, uint32_t ebx, uint32_t ecx, uint32_t edx, uint32_t esi, uint32_t edi, uint32_t ebp, uint8_t playerid, - uint8_t callback); - void Client_Send_GAME_ACTION(const GameAction* action); - void Server_Send_GAME_ACTION(const GameAction* action); - void Server_Send_TICK(); - void Server_Send_PLAYERLIST(); - void Client_Send_PING(); - void Server_Send_PING(); - void Server_Send_PINGLIST(); - void Server_Send_SETDISCONNECTMSG(NetworkConnection& connection, const char* msg); - void Server_Send_GAMEINFO(NetworkConnection& connection); - void Server_Send_SHOWERROR(NetworkConnection& connection, rct_string_id title, rct_string_id message); - void Server_Send_GROUPLIST(NetworkConnection& connection); - void Server_Send_EVENT_PLAYER_JOINED(const char* playerName); - void Server_Send_EVENT_PLAYER_DISCONNECTED(const char* playerName, const char* reason); - void Client_Send_GAMEINFO(); - void Client_Send_OBJECTS(const std::vector& objects); - void Server_Send_OBJECTS(NetworkConnection& connection, const std::vector& objects) const; - - std::vector> player_list; - std::vector> group_list; - NetworkKey _key; - std::vector _challenge; - std::map _gameActionCallbacks; - NetworkUserManager _userManager; - - std::string ServerName; - std::string ServerDescription; - std::string ServerGreeting; - std::string ServerProviderName; - std::string ServerProviderEmail; - std::string ServerProviderWebsite; - -private: - void CloseConnection(); - - bool ProcessConnection(NetworkConnection& connection); - void ProcessPacket(NetworkConnection& connection, NetworkPacket& packet); - void AddClient(ITcpSocket* socket); - void RemoveClient(std::unique_ptr& connection); - NetworkPlayer* AddPlayer(const utf8* name, const std::string& keyhash); - std::string MakePlayerNameUnique(const std::string& name); - - const char* GetMasterServerUrl(); - std::string GenerateAdvertiseKey(); - void SetupDefaultGroups(); - - bool LoadMap(IStream* stream); - bool SaveMap(IStream* stream, const std::vector& objects) const; - - struct GameCommand - { - GameCommand(uint32_t t, uint32_t* args, uint8_t p, uint8_t cb, uint32_t id) - { - tick = t; - eax = args[0]; - ebx = args[1]; - ecx = args[2]; - edx = args[3]; - esi = args[4]; - edi = args[5]; - ebp = args[6]; - playerid = p; - callback = cb; - action = nullptr; - commandIndex = id; - } - - GameCommand(uint32_t t, std::unique_ptr&& ga, uint32_t id) - { - tick = t; - action = std::move(ga); - commandIndex = id; - } - - ~GameCommand() - { - } - - uint32_t tick = 0; - uint32_t eax = 0, ebx = 0, ecx = 0, edx = 0, esi = 0, edi = 0, ebp = 0; - GameAction::Ptr action; - uint8_t playerid = 0; - uint8_t callback = 0; - uint32_t commandIndex = 0; - bool operator<(const GameCommand& comp) const - { - // First sort by tick - if (tick < comp.tick) - return true; - if (tick > comp.tick) - return false; - - // If the ticks are equal sort by commandIndex - return commandIndex < comp.commandIndex; - } - }; - - int32_t mode = NETWORK_MODE_NONE; - int32_t status = NETWORK_STATUS_NONE; - bool _closeLock = false; - bool _requireClose = false; - bool wsa_initialized = false; - ITcpSocket* listening_socket = nullptr; - uint16_t listening_port = 0; - NetworkConnection* server_connection = nullptr; - SOCKET_STATUS _lastConnectStatus = SOCKET_STATUS_CLOSED; - uint32_t last_tick_sent_time = 0; - uint32_t last_ping_sent_time = 0; - uint32_t server_tick = 0; - uint32_t server_srand0 = 0; - uint32_t server_srand0_tick = 0; - std::string server_sprite_hash; - uint8_t player_id = 0; - std::list> client_connection_list; - std::multiset game_command_queue; - std::vector chunk_buffer; - std::string _password; - bool _desynchronised = false; - INetworkServerAdvertiser* _advertiser = nullptr; - uint32_t server_connect_time = 0; - uint8_t default_group = 0; - uint32_t game_commands_processed_this_tick = 0; - uint32_t _commandId; - uint32_t _actionId; - std::string _chatLogPath; - std::string _chatLogFilenameFormat = "%Y%m%d-%H%M%S.txt"; - std::string _serverLogPath; - std::string _serverLogFilenameFormat = "%Y%m%d-%H%M%S.txt"; - std::shared_ptr _env; - - void UpdateServer(); - void UpdateClient(); - -private: - std::vector client_command_handlers; - std::vector server_command_handlers; - void Client_Handle_AUTH(NetworkConnection& connection, NetworkPacket& packet); - void Server_Handle_AUTH(NetworkConnection& connection, NetworkPacket& packet); - void Server_Client_Joined(const char* name, const std::string& keyhash, NetworkConnection& connection); - void Client_Handle_MAP(NetworkConnection& connection, NetworkPacket& packet); - void Client_Handle_CHAT(NetworkConnection& connection, NetworkPacket& packet); - void Server_Handle_CHAT(NetworkConnection& connection, NetworkPacket& packet); - void Client_Handle_GAMECMD(NetworkConnection& connection, NetworkPacket& packet); - void Server_Handle_GAMECMD(NetworkConnection& connection, NetworkPacket& packet); - void Client_Handle_GAME_ACTION(NetworkConnection& connection, NetworkPacket& packet); - void Server_Handle_GAME_ACTION(NetworkConnection& connection, NetworkPacket& packet); - void Client_Handle_TICK(NetworkConnection& connection, NetworkPacket& packet); - void Client_Handle_PLAYERLIST(NetworkConnection& connection, NetworkPacket& packet); - void Client_Handle_PING(NetworkConnection& connection, NetworkPacket& packet); - void Server_Handle_PING(NetworkConnection& connection, NetworkPacket& packet); - void Client_Handle_PINGLIST(NetworkConnection& connection, NetworkPacket& packet); - void Client_Handle_SETDISCONNECTMSG(NetworkConnection& connection, NetworkPacket& packet); - void Client_Handle_GAMEINFO(NetworkConnection& connection, NetworkPacket& packet); - void Server_Handle_GAMEINFO(NetworkConnection& connection, NetworkPacket& packet); - void Client_Handle_SHOWERROR(NetworkConnection& connection, NetworkPacket& packet); - void Client_Handle_GROUPLIST(NetworkConnection& connection, NetworkPacket& packet); - void Client_Handle_EVENT(NetworkConnection& connection, NetworkPacket& packet); - void Client_Handle_TOKEN(NetworkConnection& connection, NetworkPacket& packet); - void Server_Handle_TOKEN(NetworkConnection& connection, NetworkPacket& packet); - void Client_Handle_OBJECTS(NetworkConnection& connection, NetworkPacket& packet); - void Server_Handle_OBJECTS(NetworkConnection& connection, NetworkPacket& packet); - - uint8_t* save_for_network(size_t& out_size, const std::vector& objects) const; - - std::ofstream _chat_log_fs; - std::ofstream _server_log_fs; -}; - -#endif /* DISABLE_NETWORK */ - void network_set_env(const std::shared_ptr& env); void network_close(); void network_shutdown_client(); diff --git a/src/openrct2/title/TitleScreen.cpp b/src/openrct2/title/TitleScreen.cpp index 422131a8cd..a9207641f2 100644 --- a/src/openrct2/title/TitleScreen.cpp +++ b/src/openrct2/title/TitleScreen.cpp @@ -14,6 +14,7 @@ #include "../GameState.h" #include "../Input.h" #include "../OpenRCT2.h" +#include "../Version.h" #include "../audio/audio.h" #include "../config/Config.h" #include "../core/Console.hpp" diff --git a/src/openrct2/world/Balloon.cpp b/src/openrct2/world/Balloon.cpp index adc5c5b84f..ee0b40520b 100644 --- a/src/openrct2/world/Balloon.cpp +++ b/src/openrct2/world/Balloon.cpp @@ -7,6 +7,7 @@ * OpenRCT2 is licensed under the GNU General Public License version 3. *****************************************************************************/ +#include "../Game.h" #include "../audio/audio.h" #include "../network/network.h" #include "../scenario/Scenario.h" diff --git a/src/openrct2/world/SmallScenery.cpp b/src/openrct2/world/SmallScenery.cpp index d58a8bd8f4..97ae0958f4 100644 --- a/src/openrct2/world/SmallScenery.cpp +++ b/src/openrct2/world/SmallScenery.cpp @@ -11,6 +11,7 @@ #include "../Cheats.h" #include "../Context.h" +#include "../Game.h" #include "../OpenRCT2.h" #include "../management/Finance.h" #include "../network/network.h"