OpenTTD Source  20240919-master-gdf0233f4c2
network_internal.h
Go to the documentation of this file.
1 /*
2  * This file is part of OpenTTD.
3  * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
4  * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
5  * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
6  */
7 
10 #ifndef NETWORK_INTERNAL_H
11 #define NETWORK_INTERNAL_H
12 
13 #include "network_func.h"
14 #include "core/tcp_coordinator.h"
15 #include "core/tcp_game.h"
16 
17 #include "../command_type.h"
18 #include "../command_func.h"
19 #include "../misc/endian_buffer.hpp"
20 
21 #ifdef RANDOM_DEBUG
22 
31 #define ENABLE_NETWORK_SYNC_EVERY_FRAME
32 
37 #define NETWORK_SEND_DOUBLE_SEED
38 #endif /* RANDOM_DEBUG */
39 
40 typedef class ServerNetworkGameSocketHandler NetworkClientSocket;
41 
44  NETWORK_JOIN_STATUS_CONNECTING,
45  NETWORK_JOIN_STATUS_AUTHORIZING,
46  NETWORK_JOIN_STATUS_WAITING,
47  NETWORK_JOIN_STATUS_DOWNLOADING,
48  NETWORK_JOIN_STATUS_PROCESSING,
49  NETWORK_JOIN_STATUS_REGISTERING,
50 
51  NETWORK_JOIN_STATUS_GETTING_COMPANY_INFO,
52  NETWORK_JOIN_STATUS_END,
53 };
54 
55 extern uint32_t _frame_counter_server; // The frame_counter of the server, if in network-mode
56 extern uint32_t _frame_counter_max; // To where we may go with our clients
57 extern uint32_t _frame_counter;
58 
59 extern uint32_t _last_sync_frame; // Used in the server to store the last time a sync packet was sent to clients.
60 
61 /* networking settings */
63 
64 extern uint32_t _sync_seed_1;
65 #ifdef NETWORK_SEND_DOUBLE_SEED
66 extern uint32_t _sync_seed_2;
67 #endif
68 extern uint32_t _sync_frame;
69 extern bool _network_first_time;
70 /* Vars needed for the join-GUI */
72 extern uint8_t _network_join_waiting;
73 extern uint32_t _network_join_bytes;
74 extern uint32_t _network_join_bytes_total;
76 extern std::string _network_server_invite_code;
77 
78 /* Variable available for clients. */
79 extern std::string _network_server_name;
80 
81 extern uint8_t _network_reconnect;
82 
83 void NetworkQueryServer(const std::string &connection_string);
84 
85 void GetBindAddresses(NetworkAddressList *addresses, uint16_t port);
86 struct NetworkGameList *NetworkAddServer(const std::string &connection_string, bool manually = true, bool never_expire = false);
87 void NetworkRebuildHostList();
89 
90 /* From network_command.cpp */
94 struct CommandPacket {
97  uint32_t frame;
98  bool my_cmd;
99 
104 };
105 
109 void NetworkSyncCommandQueue(NetworkClientSocket *cs);
111 
112 void ShowNetworkError(StringID error_string);
113 void NetworkTextMessage(NetworkAction action, TextColour colour, bool self_send, const std::string &name, const std::string &str = "", int64_t data = 0, const std::string &data_str = "");
114 uint NetworkCalculateLag(const NetworkClientSocket *cs);
116 bool NetworkMakeClientNameUnique(std::string &new_name);
117 
118 std::string_view ParseCompanyFromConnectionString(const std::string &connection_string, CompanyID *company_id);
119 NetworkAddress ParseConnectionString(const std::string &connection_string, uint16_t default_port);
120 std::string NormalizeConnectionString(const std::string &connection_string, uint16_t default_port);
121 
123 
124 #endif /* NETWORK_INTERNAL_H */
_frame_counter_max
uint32_t _frame_counter_max
To where we may go with our clients.
Definition: network.cpp:77
NetworkGameList::connection_string
std::string connection_string
Address of the server.
Definition: network_gamelist.h:31
_sync_seed_1
uint32_t _sync_seed_1
Seed to compare during sync checks.
Definition: network.cpp:81
ParseConnectionString
NetworkAddress ParseConnectionString(const std::string &connection_string, uint16_t default_port)
Convert a string containing either "hostname" or "hostname:ip" to a NetworkAddress.
Definition: network.cpp:558
CommandPacket::frame
uint32_t frame
the frame in which this packet is executed
Definition: network_internal.h:97
NetworkQueryServer
void NetworkQueryServer(const std::string &connection_string)
Query a server to fetch the game-info.
Definition: network.cpp:672
INVALID_COMPANY
@ INVALID_COMPANY
An invalid company.
Definition: company_type.h:30
StringID
uint32_t StringID
Numeric value that represents a string, independent of the selected language.
Definition: strings_type.h:16
NetworkAction
NetworkAction
Actions that can be used for NetworkTextMessage.
Definition: network_type.h:90
Owner
Owner
Enum for all companies/owners.
Definition: company_type.h:18
NetworkJoinStatus
NetworkJoinStatus
Status of the clients during joining.
Definition: network_internal.h:43
_network_join_waiting
uint8_t _network_join_waiting
The number of clients waiting in front of us.
Definition: network_gui.cpp:2080
_network_server_invite_code
std::string _network_server_invite_code
Our invite code as indicated by the Game Coordinator.
Definition: network_coordinator.cpp:32
CommandPacket::err_msg
StringID err_msg
string ID of error message to use.
Definition: network_internal.h:101
TextColour
TextColour
Colour of the strings, see _string_colourmap in table/string_colours.h or docs/ottd-colourtext-palett...
Definition: gfx_type.h:260
NetworkDistributeCommands
void NetworkDistributeCommands()
Distribute the commands of ourself and the clients.
Definition: network_command.cpp:346
ParseCompanyFromConnectionString
std::string_view ParseCompanyFromConnectionString(const std::string &connection_string, CompanyID *company_id)
Parse the company part ("#company" postfix) of a connecting string.
Definition: network.cpp:479
ClientNetworkEmergencySave
void ClientNetworkEmergencySave()
Create an emergency savegame when the network connection is lost.
Definition: network_client.cpp:135
_network_first_time
bool _network_first_time
Whether we have finished joining or not.
Definition: network.cpp:86
CommandCallback
void CommandCallback(Commands cmd, const CommandCost &result, TileIndex tile)
Define a callback function for the client, after the command is finished.
Definition: command_type.h:484
_network_join_bytes
uint32_t _network_join_bytes
The number of bytes we already downloaded.
Definition: network_gui.cpp:2081
NetworkReplaceCommandClientId
static void NetworkReplaceCommandClientId(CommandPacket &cp, ClientID client_id)
Insert a client ID into the command data in a command packet.
Definition: network_command.cpp:416
_frame_counter_server
uint32_t _frame_counter_server
The frame_counter of the server, if in network-mode.
Definition: network.cpp:76
CommandPacket::company
CompanyID company
company that is executing the command
Definition: network_internal.h:96
_network_join_bytes_total
uint32_t _network_join_bytes_total
The total number of bytes to download.
Definition: network_gui.cpp:2082
CommandPacket
Everything we need to know about a command to be able to execute it.
Definition: network_internal.h:94
GetBindAddresses
void GetBindAddresses(NetworkAddressList *addresses, uint16_t port)
Get the addresses to bind to.
Definition: network.cpp:720
_network_reconnect
uint8_t _network_reconnect
Reconnect timeout.
Definition: network.cpp:72
NetworkAddressList
std::vector< NetworkAddress > NetworkAddressList
Type for a list of addresses.
Definition: address.h:19
NormalizeConnectionString
std::string NormalizeConnectionString(const std::string &connection_string, uint16_t default_port)
Normalize a connection string.
Definition: network.cpp:543
NetworkAddServer
struct NetworkGameList * NetworkAddServer(const std::string &connection_string, bool manually=true, bool never_expire=false)
Validates an address entered as a string and adds the server to the list.
Definition: network.cpp:694
NetworkGameList::manually
bool manually
True if the server was added manually.
Definition: network_gamelist.h:33
CommandDataBuffer
std::vector< uint8_t > CommandDataBuffer
Storage buffer for serialized command data.
Definition: command_type.h:470
_network_server_name
std::string _network_server_name
The current name of the server you are on.
Definition: network_client.cpp:319
CommandPacket::my_cmd
bool my_cmd
did the command originate from "me"
Definition: network_internal.h:98
ConnectionType
ConnectionType
The type of connection the Game Coordinator can detect we have.
Definition: tcp_coordinator.h:52
_sync_frame
uint32_t _sync_frame
The frame to perform the sync check.
Definition: network.cpp:85
ServerNetworkGameSocketHandler
Class for handling the server side of the game connection.
Definition: network_server.h:24
NetworkAddress
Wrapper for (un)resolved network addresses; there's no reason to transform a numeric IP to a string a...
Definition: address.h:28
ClientID
ClientID
'Unique' identifier to be given to clients
Definition: network_type.h:49
_frame_counter
uint32_t _frame_counter
The current frame.
Definition: network.cpp:78
CommandPacket::data
CommandDataBuffer data
command parameters.
Definition: network_internal.h:103
_last_sync_frame
uint32_t _last_sync_frame
Used in the server to store the last time a sync packet was sent to clients.
Definition: network.cpp:79
NetworkSyncCommandQueue
void NetworkSyncCommandQueue(NetworkClientSocket *cs)
Sync our local command queue to the command queue of the given socket.
Definition: network_command.cpp:234
tcp_coordinator.h
NetworkGameList
Structure with information shown in the game list (GUI)
Definition: network_gamelist.h:27
_network_join_status
NetworkJoinStatus _network_join_status
The status of joining.
Definition: network_gui.cpp:2079
_network_server_connection_type
ConnectionType _network_server_connection_type
What type of connection the Game Coordinator detected we are on.
Definition: network_coordinator.cpp:31
NetworkExecuteLocalCommandQueue
void NetworkExecuteLocalCommandQueue()
Execute all commands on the local command queue that ought to be executed this frame.
Definition: network_command.cpp:245
Commands
Commands
List of commands.
Definition: command_type.h:187
GetNetworkErrorMsg
StringID GetNetworkErrorMsg(NetworkErrorCode err)
Retrieve the string id of an internal error number.
Definition: network.cpp:315
_broadcast_list
NetworkAddressList _broadcast_list
List of broadcast addresses.
Definition: network.cpp:80
UpdateNetworkGameWindow
void UpdateNetworkGameWindow()
Update the network new window because a new server is found on the network.
Definition: network_gui.cpp:66
tcp_game.h
NetworkMakeClientNameUnique
bool NetworkMakeClientNameUnique(std::string &new_name)
Check whether a name is unique, and otherwise try to make it unique.
Definition: network_server.cpp:1614
CommandPacket::callback
CommandCallback * callback
any callback function executed upon successful completion of the command.
Definition: network_internal.h:102
NetworkFreeLocalCommandQueue
void NetworkFreeLocalCommandQueue()
Free the local command queues.
Definition: network_command.cpp:279
network_func.h
NetworkErrorCode
NetworkErrorCode
The error codes we send around in the protocols.
Definition: network_type.h:110
CommandPacket::cmd
Commands cmd
command being executed.
Definition: network_internal.h:100