OpenTTD Source: src/network/network_client.h Source File

OpenTTD Source 15.3

network_client.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 <https://www.gnu.org/licenses/old-licenses/gpl-2.0>.
6 */
7
10#ifndef NETWORK_CLIENT_H
11#define NETWORK_CLIENT_H
12
13#include "network_internal.h"
14
16 class ClientNetworkGameSocketHandler : public NetworkGameSocketHandler {
17private:
18 std::unique_ptr<class NetworkAuthenticationClientHandler> authentication_handler = nullptr;
19 std::string connection_string;
20 std::shared_ptr<struct PacketReader> savegame = nullptr;
21 uint8_t token = 0;
22
24 enum ServerStatus : uint8_t {
25 STATUS_INACTIVE,
26 STATUS_JOIN,
27 STATUS_AUTH_GAME,
28 STATUS_ENCRYPTED,
29 STATUS_NEWGRFS_CHECK,
30 STATUS_AUTHORIZED,
31 STATUS_MAP_WAIT,
32 STATUS_MAP,
33 STATUS_ACTIVE,
34 STATUS_END,
35 };
36
37 ServerStatus status = STATUS_INACTIVE;
38
39protected:
40 friend void NetworkExecuteLocalCommandQueue();
41 friend void NetworkClose(bool close_admins);
42 static ClientNetworkGameSocketHandler *my_client;
43
44 NetworkRecvStatus Receive_SERVER_FULL(Packet &p) override;
45 NetworkRecvStatus Receive_SERVER_BANNED(Packet &p) override;
46 NetworkRecvStatus Receive_SERVER_ERROR(Packet &p) override;
47 NetworkRecvStatus Receive_SERVER_CLIENT_INFO(Packet &p) override;
48 NetworkRecvStatus Receive_SERVER_AUTH_REQUEST(Packet &p) override;
49 NetworkRecvStatus Receive_SERVER_ENABLE_ENCRYPTION(Packet &p) override;
50 NetworkRecvStatus Receive_SERVER_WELCOME(Packet &p) override;
51 NetworkRecvStatus Receive_SERVER_WAIT(Packet &p) override;
52 NetworkRecvStatus Receive_SERVER_MAP_BEGIN(Packet &p) override;
53 NetworkRecvStatus Receive_SERVER_MAP_SIZE(Packet &p) override;
54 NetworkRecvStatus Receive_SERVER_MAP_DATA(Packet &p) override;
55 NetworkRecvStatus Receive_SERVER_MAP_DONE(Packet &p) override;
56 NetworkRecvStatus Receive_SERVER_JOIN(Packet &p) override;
57 NetworkRecvStatus Receive_SERVER_FRAME(Packet &p) override;
58 NetworkRecvStatus Receive_SERVER_SYNC(Packet &p) override;
59 NetworkRecvStatus Receive_SERVER_COMMAND(Packet &p) override;
60 NetworkRecvStatus Receive_SERVER_CHAT(Packet &p) override;
61 NetworkRecvStatus Receive_SERVER_EXTERNAL_CHAT(Packet &p) override;
62 NetworkRecvStatus Receive_SERVER_QUIT(Packet &p) override;
63 NetworkRecvStatus Receive_SERVER_ERROR_QUIT(Packet &p) override;
64 NetworkRecvStatus Receive_SERVER_SHUTDOWN(Packet &p) override;
65 NetworkRecvStatus Receive_SERVER_NEWGAME(Packet &p) override;
66 NetworkRecvStatus Receive_SERVER_RCON(Packet &p) override;
67 NetworkRecvStatus Receive_SERVER_CHECK_NEWGRFS(Packet &p) override;
68 NetworkRecvStatus Receive_SERVER_MOVE(Packet &p) override;
69 NetworkRecvStatus Receive_SERVER_CONFIG_UPDATE(Packet &p) override;
70
71 static NetworkRecvStatus SendNewGRFsOk();
72 static NetworkRecvStatus SendGetMap();
73 static NetworkRecvStatus SendMapOk();
74 static NetworkRecvStatus SendIdentify();
75 void CheckConnection();
76public:
77 ClientNetworkGameSocketHandler(SOCKET s, std::string_view connection_string);
78 ~ClientNetworkGameSocketHandler();
79
80 NetworkRecvStatus CloseConnection(NetworkRecvStatus status) override;
81 void ClientError(NetworkRecvStatus res);
82
83 static NetworkRecvStatus SendJoin();
84 static NetworkRecvStatus SendCommand(const CommandPacket &cp);
85 static NetworkRecvStatus SendError(NetworkErrorCode errorno);
86 static NetworkRecvStatus SendQuit();
87 static NetworkRecvStatus SendAck();
88
89 static NetworkRecvStatus SendAuthResponse();
90
91 static NetworkRecvStatus SendChat(NetworkAction action, DestType type, int dest, std::string_view msg, int64_t data);
92 static NetworkRecvStatus SendSetName(const std::string &name);
93 static NetworkRecvStatus SendRCon(std::string_view password, std::string_view command);
94 static NetworkRecvStatus SendMove(CompanyID company);
95
96 static bool IsConnected();
97
98 static void Send();
99 static bool Receive();
100 static bool GameLoop();
101};
102
104 typedef ClientNetworkGameSocketHandler MyClient;
105
106void NetworkClient_Connected();
107
109 struct NetworkJoinInfo {
110 NetworkJoinInfo() : company(COMPANY_SPECTATOR) {}
111 std::string connection_string;
112 CompanyID company;
113 std::string server_password;
114};
115
116extern NetworkJoinInfo _network_join;
117
118#endif /* NETWORK_CLIENT_H */
ClientNetworkGameSocketHandler
Class for handling the client side of the game connection.
Definition network_client.h:16
ClientNetworkGameSocketHandler::Receive_SERVER_QUIT
NetworkRecvStatus Receive_SERVER_QUIT(Packet &p) override
Notification that a client left the game: uint32_t ID of the client.
Definition network_client.cpp:1021
ClientNetworkGameSocketHandler::SendChat
static NetworkRecvStatus SendChat(NetworkAction action, DestType type, int dest, std::string_view msg, int64_t data)
Send a chat-packet over the network.
Definition network_client.cpp:394
ClientNetworkGameSocketHandler::my_client
static ClientNetworkGameSocketHandler * my_client
This is us!
Definition network_client.h:42
ClientNetworkGameSocketHandler::SendQuit
static NetworkRecvStatus SendQuit()
Tell the server we would like to quit.
Definition network_client.cpp:440
ClientNetworkGameSocketHandler::Receive_SERVER_SYNC
NetworkRecvStatus Receive_SERVER_SYNC(Packet &p) override
Sends a sync-check to the client: uint32_t Frame counter.
Definition network_client.cpp:898
ClientNetworkGameSocketHandler::Receive_SERVER_ENABLE_ENCRYPTION
NetworkRecvStatus Receive_SERVER_ENABLE_ENCRYPTION(Packet &p) override
Indication to the client that authentication is complete and encryption has to be used from here on f...
Definition network_client.cpp:700
ClientNetworkGameSocketHandler::Receive_SERVER_MAP_SIZE
NetworkRecvStatus Receive_SERVER_MAP_SIZE(Packet &p) override
Sends the size of the map to the client.
Definition network_client.cpp:772
ClientNetworkGameSocketHandler::Receive
static bool Receive()
Check whether we received/can send some data from/to the server and when that's the case handle it ap...
Definition network_client.cpp:199
ClientNetworkGameSocketHandler::Receive_SERVER_MAP_DONE
NetworkRecvStatus Receive_SERVER_MAP_DONE(Packet &p) override
Sends that all data of the map are sent to the client:
Definition network_client.cpp:799
ClientNetworkGameSocketHandler::Receive_SERVER_CLIENT_INFO
NetworkRecvStatus Receive_SERVER_CLIENT_INFO(Packet &p) override
Send information about a client: uint32_t ID of the client (always unique on a server.
Definition network_client.cpp:519
ClientNetworkGameSocketHandler::~ClientNetworkGameSocketHandler
~ClientNetworkGameSocketHandler()
Clear whatever we assigned.
Definition network_client.cpp:109
ClientNetworkGameSocketHandler::connection_string
std::string connection_string
Address we are connected to.
Definition network_client.h:19
ClientNetworkGameSocketHandler::status
ServerStatus status
Status of the connection with the server.
Definition network_client.h:37
ClientNetworkGameSocketHandler::Receive_SERVER_CHECK_NEWGRFS
NetworkRecvStatus Receive_SERVER_CHECK_NEWGRFS(Packet &p) override
Sends information about all used GRFs to the client: uint8_t Amount of GRFs (the following data is re...
Definition network_client.cpp:630
ClientNetworkGameSocketHandler::SendMove
static NetworkRecvStatus SendMove(CompanyID company)
Ask the server to move us.
Definition network_client.cpp:470
ClientNetworkGameSocketHandler::Receive_SERVER_WAIT
NetworkRecvStatus Receive_SERVER_WAIT(Packet &p) override
Notification that another client is currently receiving the map: uint8_t Number of clients waiting in...
Definition network_client.cpp:732
ClientNetworkGameSocketHandler::authentication_handler
std::unique_ptr< class NetworkAuthenticationClientHandler > authentication_handler
The handler for the authentication.
Definition network_client.h:18
ClientNetworkGameSocketHandler::savegame
std::shared_ptr< struct PacketReader > savegame
Packet reader for reading the savegame.
Definition network_client.h:20
ClientNetworkGameSocketHandler::IsConnected
static bool IsConnected()
Check whether the client is actually connected (and in the game).
Definition network_client.cpp:484
ClientNetworkGameSocketHandler::Receive_SERVER_EXTERNAL_CHAT
NetworkRecvStatus Receive_SERVER_EXTERNAL_CHAT(Packet &p) override
Sends a chat-packet for external source to the client: string Name of the source this message came fr...
Definition network_client.cpp:984
ClientNetworkGameSocketHandler::token
uint8_t token
The token we need to send back to the server to prove we're the right client.
Definition network_client.h:21
ClientNetworkGameSocketHandler::SendSetName
static NetworkRecvStatus SendSetName(const std::string &name)
Tell the server that we like to change the name of the client.
Definition network_client.cpp:426
ClientNetworkGameSocketHandler::NetworkExecuteLocalCommandQueue
friend void NetworkExecuteLocalCommandQueue()
Execute all commands on the local command queue that ought to be executed this frame.
Definition network_command.cpp:256
ClientNetworkGameSocketHandler::Receive_SERVER_ERROR_QUIT
NetworkRecvStatus Receive_SERVER_ERROR_QUIT(Packet &p) override
Inform all clients that one client made an error and thus has quit/been disconnected: uint32_t ID of ...
Definition network_client.cpp:1002
ClientNetworkGameSocketHandler::SendNewGRFsOk
static NetworkRecvStatus SendNewGRFsOk()
Tell the server we got all the NewGRFs.
Definition network_client.cpp:315
ClientNetworkGameSocketHandler::SendMapOk
static NetworkRecvStatus SendMapOk()
Tell the server we received the complete map.
Definition network_client.cpp:353
ClientNetworkGameSocketHandler::CheckConnection
void CheckConnection()
Check the connection's state, i.e.
Definition network_client.cpp:1158
ClientNetworkGameSocketHandler::Receive_SERVER_RCON
NetworkRecvStatus Receive_SERVER_RCON(Packet &p) override
Send the result of an issues RCon command back to the client: uint16_t Colour code.
Definition network_client.cpp:1095
ClientNetworkGameSocketHandler::Receive_SERVER_BANNED
NetworkRecvStatus Receive_SERVER_BANNED(Packet &p) override
Notification that the client trying to join is banned.
Definition network_client.cpp:506
ClientNetworkGameSocketHandler::Receive_SERVER_CONFIG_UPDATE
NetworkRecvStatus Receive_SERVER_CONFIG_UPDATE(Packet &p) override
Update the clients knowledge of the max settings: uint8_t Maximum number of companies allowed.
Definition network_client.cpp:1141
ClientNetworkGameSocketHandler::ClientError
void ClientError(NetworkRecvStatus res)
Handle an error coming from the client side.
Definition network_client.cpp:145
ClientNetworkGameSocketHandler::Receive_SERVER_WELCOME
NetworkRecvStatus Receive_SERVER_WELCOME(Packet &p) override
The client is joined and ready to receive their map: uint32_t Own client ID.
Definition network_client.cpp:718
ClientNetworkGameSocketHandler::SendAck
static NetworkRecvStatus SendAck()
Send an acknowledgement from the server's ticks.
Definition network_client.cpp:366
ClientNetworkGameSocketHandler::Receive_SERVER_MAP_BEGIN
NetworkRecvStatus Receive_SERVER_MAP_BEGIN(Packet &p) override
Sends that the server will begin with sending the map to the client: uint32_t Current frame.
Definition network_client.cpp:748
ClientNetworkGameSocketHandler::Receive_SERVER_JOIN
NetworkRecvStatus Receive_SERVER_JOIN(Packet &p) override
A client joined (PACKET_CLIENT_MAP_OK), what usually directly follows is a PACKET_SERVER_CLIENT_INFO:...
Definition network_client.cpp:1043
ClientNetworkGameSocketHandler::SendAuthResponse
static NetworkRecvStatus SendAuthResponse()
Set the game password as requested.
Definition network_client.cpp:328
ClientNetworkGameSocketHandler::GameLoop
static bool GameLoop()
Actual game loop for the client.
Definition network_client.cpp:224
ClientNetworkGameSocketHandler::Send
static void Send()
Send the packets of this socket handler.
Definition network_client.cpp:214
ClientNetworkGameSocketHandler::ServerStatus
ServerStatus
Status of the connection with the server.
Definition network_client.h:24
ClientNetworkGameSocketHandler::STATUS_JOIN
@ STATUS_JOIN
We are trying to join a server.
Definition network_client.h:26
ClientNetworkGameSocketHandler::STATUS_ENCRYPTED
@ STATUS_ENCRYPTED
The game authentication has completed and from here on the connection to the server is encrypted.
Definition network_client.h:28
ClientNetworkGameSocketHandler::STATUS_NEWGRFS_CHECK
@ STATUS_NEWGRFS_CHECK
Last action was checking NewGRFs.
Definition network_client.h:29
ClientNetworkGameSocketHandler::STATUS_MAP
@ STATUS_MAP
The client is downloading the map.
Definition network_client.h:32
ClientNetworkGameSocketHandler::STATUS_END
@ STATUS_END
Must ALWAYS be on the end of this list!! (period)
Definition network_client.h:34
ClientNetworkGameSocketHandler::STATUS_AUTH_GAME
@ STATUS_AUTH_GAME
Last action was requesting game (server) password.
Definition network_client.h:27
ClientNetworkGameSocketHandler::STATUS_ACTIVE
@ STATUS_ACTIVE
The client is active within in the game.
Definition network_client.h:33
ClientNetworkGameSocketHandler::STATUS_MAP_WAIT
@ STATUS_MAP_WAIT
The client is waiting as someone else is downloading the map.
Definition network_client.h:31
ClientNetworkGameSocketHandler::STATUS_INACTIVE
@ STATUS_INACTIVE
The client is not connected nor active.
Definition network_client.h:25
ClientNetworkGameSocketHandler::STATUS_AUTHORIZED
@ STATUS_AUTHORIZED
The client is authorized at the server.
Definition network_client.h:30
ClientNetworkGameSocketHandler::SendRCon
static NetworkRecvStatus SendRCon(std::string_view password, std::string_view command)
Send a console command.
Definition network_client.cpp:455
ClientNetworkGameSocketHandler::Receive_SERVER_CHAT
NetworkRecvStatus Receive_SERVER_CHAT(Packet &p) override
Sends a chat-packet to the client: uint8_t ID of the action (see NetworkAction).
Definition network_client.cpp:934
ClientNetworkGameSocketHandler::Receive_SERVER_MOVE
NetworkRecvStatus Receive_SERVER_MOVE(Packet &p) override
Move a client from one company into another: uint32_t ID of the client.
Definition network_client.cpp:1111
ClientNetworkGameSocketHandler::SendCommand
static NetworkRecvStatus SendCommand(const CommandPacket &cp)
Send a command to the server.
Definition network_client.cpp:382
ClientNetworkGameSocketHandler::Receive_SERVER_FRAME
NetworkRecvStatus Receive_SERVER_FRAME(Packet &p) override
Sends the current frame counter to the client: uint32_t Frame counter uint32_t Frame counter max (how...
Definition network_client.cpp:863
ClientNetworkGameSocketHandler::Receive_SERVER_COMMAND
NetworkRecvStatus Receive_SERVER_COMMAND(Packet &p) override
Sends a DoCommand to the client: uint8_t ID of the company (0..MAX_COMPANIES-1).
Definition network_client.cpp:913
ClientNetworkGameSocketHandler::Receive_SERVER_NEWGAME
NetworkRecvStatus Receive_SERVER_NEWGAME(Packet &p) override
Let the clients know that the server is loading a new map.
Definition network_client.cpp:1076
ClientNetworkGameSocketHandler::CloseConnection
NetworkRecvStatus CloseConnection(NetworkRecvStatus status) override
Close the network connection due to the given status.
Definition network_client.cpp:117
ClientNetworkGameSocketHandler::SendGetMap
static NetworkRecvStatus SendGetMap()
Request the map from the server.
Definition network_client.cpp:340
ClientNetworkGameSocketHandler::Receive_SERVER_AUTH_REQUEST
NetworkRecvStatus Receive_SERVER_AUTH_REQUEST(Packet &p) override
Indication to the client that it needs to authenticate: uint8_t The NetworkAuthenticationMethod to us...
Definition network_client.cpp:675
ClientNetworkGameSocketHandler::Receive_SERVER_MAP_DATA
NetworkRecvStatus Receive_SERVER_MAP_DATA(Packet &p) override
Sends the data of the map to the client: Contains a part of the map (until max size of packet).
Definition network_client.cpp:785
ClientNetworkGameSocketHandler::Receive_SERVER_ERROR
NetworkRecvStatus Receive_SERVER_ERROR(Packet &p) override
The client made an error: uint8_t Error code caused (see NetworkErrorCode).
Definition network_client.cpp:580
ClientNetworkGameSocketHandler::SendError
static NetworkRecvStatus SendError(NetworkErrorCode errorno)
Send an error-packet over the network.
Definition network_client.cpp:411
ClientNetworkGameSocketHandler::Receive_SERVER_SHUTDOWN
NetworkRecvStatus Receive_SERVER_SHUTDOWN(Packet &p) override
Let the clients know that the server is closing.
Definition network_client.cpp:1061
ClientNetworkGameSocketHandler::SendJoin
static NetworkRecvStatus SendJoin()
Tell the server we would like to join.
Definition network_client.cpp:285
ClientNetworkGameSocketHandler::NetworkClose
friend void NetworkClose(bool close_admins)
Close current connections.
Definition network.cpp:593
ClientNetworkGameSocketHandler::Receive_SERVER_FULL
NetworkRecvStatus Receive_SERVER_FULL(Packet &p) override
Notification that the server is full.
Definition network_client.cpp:496
NetworkGameSocketHandler
Base socket handler for all TCP sockets.
Definition tcp_game.h:140
COMPANY_SPECTATOR
static constexpr CompanyID COMPANY_SPECTATOR
The client is spectating.
Definition company_type.h:21
NetworkRecvStatus
NetworkRecvStatus
Status of a network client; reasons why a client has quit.
Definition core.h:23
_network_join
NetworkJoinInfo _network_join
Information about the game to join to.
Definition network_client.cpp:278
NetworkClient_Connected
void NetworkClient_Connected()
Is called after a client is connected to the server.
Definition network_client.cpp:1187
MyClient
ClientNetworkGameSocketHandler MyClient
Helper to make the code look somewhat nicer.
Definition network_client.h:104
network_internal.h
Variables and function used internally.
DestType
DestType
Destination of our chat messages.
Definition network_type.h:68
NetworkErrorCode
NetworkErrorCode
The error codes we send around in the protocols.
Definition network_type.h:99
NetworkAction
NetworkAction
Actions that can be used for NetworkTextMessage.
Definition network_type.h:79
CommandPacket
Everything we need to know about a command to be able to execute it.
Definition network_internal.h:95
NetworkJoinInfo
Information required to join a server.
Definition network_client.h:109
NetworkJoinInfo::connection_string
std::string connection_string
The address of the server to join.
Definition network_client.h:111
NetworkJoinInfo::server_password
std::string server_password
The password of the server to join.
Definition network_client.h:113
NetworkJoinInfo::company
CompanyID company
The company to join.
Definition network_client.h:112
Packet
Internal entity of a packet.
Definition packet.h:43
PoolID< uint8_t, struct CompanyIDTag, 0xF, 0xFF >