OpenTTD Source 20241224-master-gee860a5c8e
ServerNetworkGameSocketHandler Class Reference

Class for handling the server side of the game connection. More...

#include <network_server.h>

Inheritance diagram for ServerNetworkGameSocketHandler:
Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_networkclientsocket_pool > NetworkGameSocketHandler TCPListenHandler< ServerNetworkGameSocketHandler, PACKET_SERVER_FULL, PACKET_SERVER_BANNED > NetworkTCPSocketHandler NetworkSocketHandler

Public Types

enum  ClientStatus {
  STATUS_INACTIVE , STATUS_AUTH_GAME , STATUS_IDENTIFY , STATUS_NEWGRFS_CHECK ,
  STATUS_AUTHORIZED , STATUS_MAP_WAIT , STATUS_MAP , STATUS_DONE_MAP ,
  STATUS_PRE_ACTIVE , STATUS_ACTIVE , STATUS_END
}
 Status of a client. More...
 
- Public Types inherited from Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_networkclientsocket_pool >
typedef struct Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero > Pool
 Type of the pool this item is going to be part of.
 

Public Member Functions

 ServerNetworkGameSocketHandler (SOCKET s)
 Create a new socket for the server side of the game connection.
 
 ~ServerNetworkGameSocketHandler ()
 Clear everything related to this client.
 
std::unique_ptr< PacketReceivePacket () override
 Receives a packet for the given client.
 
NetworkRecvStatus CloseConnection (NetworkRecvStatus status) override
 Close the network connection due to the given status.
 
std::string GetClientName () const
 Get the name of the client, if the user did not send it yet, Client ID is used.
 
void CheckNextClientToSendMap (NetworkClientSocket *ignore_cs=nullptr)
 
NetworkRecvStatus SendWait ()
 Tell the client that its put in a waiting queue.
 
NetworkRecvStatus SendMap ()
 This sends the map to the client.
 
NetworkRecvStatus SendErrorQuit (ClientID client_id, NetworkErrorCode errorno)
 Tell the client another client quit with an error.
 
NetworkRecvStatus SendQuit (ClientID client_id)
 Tell the client another client quit.
 
NetworkRecvStatus SendShutdown ()
 Tell the client we're shutting down.
 
NetworkRecvStatus SendNewGame ()
 Tell the client we're starting a new game.
 
NetworkRecvStatus SendRConResult (uint16_t colour, const std::string &command)
 Send the result of a console action.
 
NetworkRecvStatus SendMove (ClientID client_id, CompanyID company_id)
 Tell that a client moved to another company.
 
NetworkRecvStatus SendClientInfo (NetworkClientInfo *ci)
 Send the client information about a client.
 
NetworkRecvStatus SendError (NetworkErrorCode error, const std::string &reason={})
 Send an error to the client, and close its connection.
 
NetworkRecvStatus SendChat (NetworkAction action, ClientID client_id, bool self_send, const std::string &msg, int64_t data)
 Send a chat message.
 
NetworkRecvStatus SendExternalChat (const std::string &source, TextColour colour, const std::string &user, const std::string &msg)
 Send a chat message from external source.
 
NetworkRecvStatus SendJoin (ClientID client_id)
 Tell that a client joined.
 
NetworkRecvStatus SendFrame ()
 Tell the client that they may run to a particular frame.
 
NetworkRecvStatus SendSync ()
 Request the client to sync.
 
NetworkRecvStatus SendCommand (const CommandPacket &cp)
 Send a command to the client to execute.
 
NetworkRecvStatus SendConfigUpdate ()
 Send an update about the max company/spectator counts.
 
const std::string & GetClientIP ()
 Get the IP address/hostname of the connected client.
 
std::string_view GetPeerPublicKey () const
 
- Public Member Functions inherited from Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_networkclientsocket_pool >
void * operator new (size_t size)
 Allocates space for new Titem.
 
void * operator new (size_t size, size_t index)
 Allocates space for new Titem with given index.
 
void * operator new (size_t, void *ptr)
 Allocates space for new Titem at given memory address.
 
void operator delete (void *p)
 Marks Titem as free.
 
- Public Member Functions inherited from NetworkGameSocketHandler
NetworkRecvStatus CloseConnection (bool error=true) override
 Functions to help ReceivePacket/SendPacket a bit A socket can make errors.
 
void SetInfo (NetworkClientInfo *info)
 Sets the client info for this socket handler.
 
NetworkClientInfoGetInfo () const
 Gets the client info of this socket handler.
 
NetworkRecvStatus ReceivePackets ()
 Do the actual receiving of packets.
 
const char * ReceiveCommand (Packet &p, CommandPacket &cp)
 Receives a command from the network.
 
void SendCommand (Packet &p, const CommandPacket &cp)
 Sends a command over the network.
 
bool IsPendingDeletion () const
 
void DeferDeletion ()
 
- Public Member Functions inherited from NetworkTCPSocketHandler
bool IsConnected () const
 Whether this socket is currently bound to a socket.
 
void CloseSocket ()
 Close the actual socket of the connection.
 
virtual void SendPacket (std::unique_ptr< Packet > &&packet)
 This function puts the packet in the send-queue and it is send as soon as possible.
 
SendPacketsState SendPackets (bool closing_down=false)
 Sends all the buffered packets out for this client.
 
bool CanSendReceive ()
 Check whether this socket can send or receive something.
 
bool HasSendQueue ()
 Whether there is something pending in the send queue.
 
 NetworkTCPSocketHandler (SOCKET s=INVALID_SOCKET)
 Construct a socket handler for a TCP connection.
 
- Public Member Functions inherited from NetworkSocketHandler
 NetworkSocketHandler ()
 Create a new unbound socket.
 
virtual ~NetworkSocketHandler ()=default
 Close the socket when destructing the socket handler.
 
void MarkClosed ()
 Mark the connection as closed.
 
bool HasClientQuit () const
 Whether the current client connected to the socket has quit.
 
void Reopen ()
 Reopen the socket so we can send/receive stuff again.
 

Static Public Member Functions

static void Send ()
 Send the packets for the server sockets.
 
static void AcceptConnection (SOCKET s, const NetworkAddress &address)
 Handle the accepting of a connection to the server.
 
static bool AllowConnection ()
 Whether an connection is allowed or not at this moment.
 
static const char * GetName ()
 Get the name used by the listener.
 
static ServerNetworkGameSocketHandlerGetByClientID (ClientID client_id)
 Return the client state given it's client-identifier.
 
- Static Public Member Functions inherited from Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_networkclientsocket_pool >
static bool CanAllocateItem (size_t n=1)
 Helper functions so we can use PoolItem::Function() instead of _poolitem_pool.Function()
 
static bool CleaningPool ()
 Returns current state of pool cleaning - yes or no.
 
static bool IsValidID (size_t index)
 Tests whether given index can be used to get valid (non-nullptr) Titem.
 
static Titem * Get (size_t index)
 Returns Titem with given index.
 
static Titem * GetIfValid (size_t index)
 Returns Titem with given index.
 
static size_t GetPoolSize ()
 Returns first unused index.
 
static size_t GetNumItems ()
 Returns number of valid items in the pool.
 
static void PostDestructor (size_t index)
 Dummy function called after destructor of each member.
 
static Pool::IterateWrapper< Titem > Iterate (size_t from=0)
 Returns an iterable ensemble of all valid Titem.
 
- Static Public Member Functions inherited from NetworkGameSocketHandler
static void ProcessDeferredDeletions ()
 
- Static Public Member Functions inherited from TCPListenHandler< ServerNetworkGameSocketHandler, PACKET_SERVER_FULL, PACKET_SERVER_BANNED >
static bool ValidateClient (SOCKET s, NetworkAddress &address)
 
static void AcceptClient (SOCKET ls)
 Accepts clients from the sockets.
 
static bool Receive ()
 Handle the receiving of packets.
 
static bool Listen (uint16_t port)
 Listen on a particular port.
 
static void CloseListeners ()
 Close the sockets we're listening on.
 

Data Fields

uint8_t lag_test
 Byte used for lag-testing the client.
 
uint8_t last_token
 The last random token we did send to verify the client is listening.
 
uint32_t last_token_frame
 The last frame we received the right token.
 
ClientStatus status
 Status of this client.
 
CommandQueue outgoing_queue
 The command-queue awaiting delivery; conceptually more a bucket to gather commands in, after which the whole bucket is sent to the client.
 
size_t receive_limit
 Amount of bytes that we can receive at this moment.
 
std::shared_ptr< struct PacketWritersavegame
 Writer used to write the savegame.
 
NetworkAddress client_address
 IP-address of the client (so they can be banned)
 
- Data Fields inherited from Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_networkclientsocket_pool >
Tindex index
 Index of this pool item.
 
- Data Fields inherited from NetworkGameSocketHandler
ClientID client_id
 Client identifier.
 
uint32_t last_frame
 Last frame we have executed.
 
uint32_t last_frame_server
 Last frame the server has executed.
 
CommandQueue incoming_queue
 The command-queue awaiting handling.
 
std::chrono::steady_clock::time_point last_packet
 Time we received the last frame.
 
- Data Fields inherited from NetworkTCPSocketHandler
SOCKET sock
 The socket currently connected to.
 
bool writable
 Can we write to this socket?
 

Protected Member Functions

NetworkRecvStatus Receive_CLIENT_JOIN (Packet &p) override
 Try to join the server: string OpenTTD revision (norev0000 if no revision).
 
NetworkRecvStatus Receive_CLIENT_IDENTIFY (Packet &p) override
 The client tells the server about the identity of the client: string Name of the client (max NETWORK_NAME_LENGTH).
 
NetworkRecvStatus Receive_CLIENT_GAME_INFO (Packet &p) override
 Request game information.
 
NetworkRecvStatus Receive_CLIENT_AUTH_RESPONSE (Packet &p) override
 Send the response to the authentication request: 32 * uint8_t Public key of the client.
 
NetworkRecvStatus Receive_CLIENT_GETMAP (Packet &p) override
 Request the map from the server.
 
NetworkRecvStatus Receive_CLIENT_MAP_OK (Packet &p) override
 Tell the server that we are done receiving/loading the map.
 
NetworkRecvStatus Receive_CLIENT_ACK (Packet &p) override
 Tell the server we are done with this frame: uint32_t Current frame counter of the client.
 
NetworkRecvStatus Receive_CLIENT_COMMAND (Packet &p) override
 The client has done a command and wants us to handle it.
 
NetworkRecvStatus Receive_CLIENT_CHAT (Packet &p) override
 Sends a chat-packet to the server: uint8_t ID of the action (see NetworkAction).
 
NetworkRecvStatus Receive_CLIENT_SET_NAME (Packet &p) override
 Gives the client a new name: string New name of the client.
 
NetworkRecvStatus Receive_CLIENT_QUIT (Packet &p) override
 The client is quitting the game.
 
NetworkRecvStatus Receive_CLIENT_ERROR (Packet &p) override
 The client made an error and is quitting the game.
 
NetworkRecvStatus Receive_CLIENT_RCON (Packet &p) override
 Send an RCon command to the server: string RCon password.
 
NetworkRecvStatus Receive_CLIENT_NEWGRFS_CHECKED (Packet &p) override
 Tell the server that we have the required GRFs.
 
NetworkRecvStatus Receive_CLIENT_MOVE (Packet &p) override
 Request the server to move this client into another company: uint8_t ID of the company the client wants to join.
 
NetworkRecvStatus SendGameInfo ()
 Send the client information about the server.
 
NetworkRecvStatus SendNewGRFCheck ()
 Send the check for the NewGRFs.
 
NetworkRecvStatus SendWelcome ()
 Send the client a welcome message with some basic information.
 
NetworkRecvStatus SendAuthRequest ()
 Request the game password.
 
NetworkRecvStatus SendEnableEncryption ()
 Notify the client that the authentication has completed and tell that for the remainder of this socket encryption is enabled.
 
- Protected Member Functions inherited from NetworkGameSocketHandler
NetworkRecvStatus ReceiveInvalidPacket (PacketGameType type)
 Helper for logging receiving invalid packets.
 
virtual NetworkRecvStatus Receive_SERVER_FULL (Packet &p)
 Notification that the server is full.
 
virtual NetworkRecvStatus Receive_SERVER_BANNED (Packet &p)
 Notification that the client trying to join is banned.
 
virtual NetworkRecvStatus Receive_SERVER_ERROR (Packet &p)
 The client made an error: uint8_t Error code caused (see NetworkErrorCode).
 
virtual NetworkRecvStatus Receive_SERVER_GAME_INFO (Packet &p)
 Sends information about the game.
 
virtual NetworkRecvStatus Receive_SERVER_CLIENT_INFO (Packet &p)
 Send information about a client: uint32_t ID of the client (always unique on a server.
 
virtual NetworkRecvStatus Receive_SERVER_AUTH_REQUEST (Packet &p)
 Indication to the client that it needs to authenticate: uint8_t The NetworkAuthenticationMethod to use.
 
virtual NetworkRecvStatus Receive_SERVER_ENABLE_ENCRYPTION (Packet &p)
 Indication to the client that authentication is complete and encryption has to be used from here on forward.
 
virtual NetworkRecvStatus Receive_SERVER_WELCOME (Packet &p)
 The client is joined and ready to receive their map: uint32_t Own client ID.
 
virtual NetworkRecvStatus Receive_SERVER_WAIT (Packet &p)
 Notification that another client is currently receiving the map: uint8_t Number of clients waiting in front of you.
 
virtual NetworkRecvStatus Receive_SERVER_MAP_BEGIN (Packet &p)
 Sends that the server will begin with sending the map to the client: uint32_t Current frame.
 
virtual NetworkRecvStatus Receive_SERVER_MAP_SIZE (Packet &p)
 Sends the size of the map to the client.
 
virtual NetworkRecvStatus Receive_SERVER_MAP_DATA (Packet &p)
 Sends the data of the map to the client: Contains a part of the map (until max size of packet).
 
virtual NetworkRecvStatus Receive_SERVER_MAP_DONE (Packet &p)
 Sends that all data of the map are sent to the client:
 
virtual NetworkRecvStatus Receive_SERVER_JOIN (Packet &p)
 A client joined (PACKET_CLIENT_MAP_OK), what usually directly follows is a PACKET_SERVER_CLIENT_INFO: uint32_t ID of the client that just joined the game.
 
virtual NetworkRecvStatus Receive_SERVER_FRAME (Packet &p)
 Sends the current frame counter to the client: uint32_t Frame counter uint32_t Frame counter max (how far may the client walk before the server?) uint32_t General seed 1 (dependent on compile settings, not default).
 
virtual NetworkRecvStatus Receive_SERVER_SYNC (Packet &p)
 Sends a sync-check to the client: uint32_t Frame counter.
 
virtual NetworkRecvStatus Receive_SERVER_COMMAND (Packet &p)
 Sends a DoCommand to the client: uint8_t ID of the company (0..MAX_COMPANIES-1).
 
virtual NetworkRecvStatus Receive_SERVER_CHAT (Packet &p)
 Sends a chat-packet to the client: uint8_t ID of the action (see NetworkAction).
 
virtual NetworkRecvStatus Receive_SERVER_EXTERNAL_CHAT (Packet &p)
 Sends a chat-packet for external source to the client: string Name of the source this message came from.
 
virtual NetworkRecvStatus Receive_SERVER_QUIT (Packet &p)
 Notification that a client left the game: uint32_t ID of the client.
 
virtual NetworkRecvStatus Receive_SERVER_ERROR_QUIT (Packet &p)
 Inform all clients that one client made an error and thus has quit/been disconnected: uint32_t ID of the client that caused the error.
 
virtual NetworkRecvStatus Receive_SERVER_SHUTDOWN (Packet &p)
 Let the clients know that the server is closing.
 
virtual NetworkRecvStatus Receive_SERVER_NEWGAME (Packet &p)
 Let the clients know that the server is loading a new map.
 
virtual NetworkRecvStatus Receive_SERVER_RCON (Packet &p)
 Send the result of an issues RCon command back to the client: uint16_t Colour code.
 
virtual NetworkRecvStatus Receive_SERVER_CHECK_NEWGRFS (Packet &p)
 Sends information about all used GRFs to the client: uint8_t Amount of GRFs (the following data is repeated this many times, i.e.
 
virtual NetworkRecvStatus Receive_SERVER_MOVE (Packet &p)
 Move a client from one company into another: uint32_t ID of the client.
 
virtual NetworkRecvStatus Receive_SERVER_CONFIG_UPDATE (Packet &p)
 Update the clients knowledge of the max settings: uint8_t Maximum number of companies allowed.
 
NetworkRecvStatus HandlePacket (Packet &p)
 Handle the given packet, i.e.
 
 NetworkGameSocketHandler (SOCKET s)
 Create a new socket for the game connection.
 

Protected Attributes

std::unique_ptr< class NetworkAuthenticationServerHandlerauthentication_handler
 The handler for the authentication.
 
std::string peer_public_key
 The public key of our client.
 
- Protected Attributes inherited from NetworkSocketHandler
std::unique_ptr< class NetworkEncryptionHandlerreceive_encryption_handler
 The handler for decrypting received packets.
 
std::unique_ptr< class NetworkEncryptionHandlersend_encryption_handler
 The handler for encrypting sent packets.
 

Detailed Description

Class for handling the server side of the game connection.

Definition at line 24 of file network_server.h.

Member Enumeration Documentation

◆ ClientStatus

Status of a client.

Enumerator
STATUS_INACTIVE 

The client is not connected nor active.

STATUS_AUTH_GAME 

The client is authorizing with game (server) password.

STATUS_IDENTIFY 

The client is identifying itself.

STATUS_NEWGRFS_CHECK 

The client is checking NewGRFs.

STATUS_AUTHORIZED 

The client is authorized.

STATUS_MAP_WAIT 

The client is waiting as someone else is downloading the map.

STATUS_MAP 

The client is downloading the map.

STATUS_DONE_MAP 

The client has downloaded the map.

STATUS_PRE_ACTIVE 

The client is catching up the delayed frames.

STATUS_ACTIVE 

The client is active within in the game.

STATUS_END 

Must ALWAYS be on the end of this list!! (period).

Definition at line 53 of file network_server.h.

Constructor & Destructor Documentation

◆ ServerNetworkGameSocketHandler()

ServerNetworkGameSocketHandler::ServerNetworkGameSocketHandler ( SOCKET  s)

◆ ~ServerNetworkGameSocketHandler()

ServerNetworkGameSocketHandler::~ServerNetworkGameSocketHandler ( )

Member Function Documentation

◆ AcceptConnection()

void ServerNetworkGameSocketHandler::AcceptConnection ( SOCKET  s,
const NetworkAddress address 
)
static

Handle the accepting of a connection to the server.

Parameters
sThe socket of the new connection.
addressThe address of the peer.

Definition at line 568 of file network.cpp.

References _network_clients_connected, client_address, InvalidateWindowData(), and WC_CLIENT_LIST.

Referenced by ClientNetworkCoordinatorSocketHandler::ConnectSuccess().

◆ AllowConnection()

bool ServerNetworkGameSocketHandler::AllowConnection ( )
static

◆ CheckNextClientToSendMap()

void ServerNetworkGameSocketHandler::CheckNextClientToSendMap ( NetworkClientSocket ignore_cs = nullptr)

Definition at line 525 of file network_server.cpp.

◆ CloseConnection()

◆ GetByClientID()

ServerNetworkGameSocketHandler * ServerNetworkGameSocketHandler::GetByClientID ( ClientID  client_id)
static

Return the client state given it's client-identifier.

Parameters
client_idthe ClientID to search for
Returns
return a pointer to the corresponding NetworkClientSocket struct or nullptr when not found

Definition at line 152 of file network.cpp.

References NetworkGameSocketHandler::client_id, and Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_networkclientsocket_pool >::Iterate().

◆ GetClientIP()

const std::string & ServerNetworkGameSocketHandler::GetClientIP ( )

Get the IP address/hostname of the connected client.

Returns
The IP address.

Definition at line 1925 of file network_server.cpp.

References client_address, and NetworkAddress::GetHostname().

Referenced by Receive_CLIENT_MAP_OK().

◆ GetClientName()

std::string ServerNetworkGameSocketHandler::GetClientName ( ) const

Get the name of the client, if the user did not send it yet, Client ID is used.

Parameters
client_nameThe variable to write the name to.
lastThe pointer to the last element of the destination buffer

Definition at line 2105 of file network_server.cpp.

References NetworkGameSocketHandler::client_id, NetworkClientInfo::client_name, and NetworkGameSocketHandler::GetInfo().

Referenced by CloseConnection(), Receive_CLIENT_ERROR(), Receive_CLIENT_MAP_OK(), Receive_CLIENT_QUIT(), and SendError().

◆ GetName()

static const char * ServerNetworkGameSocketHandler::GetName ( )
inlinestatic

Get the name used by the listener.

Returns
the name to show in debug logs and the like.

Definition at line 113 of file network_server.h.

Referenced by CloseConnection(), ClientNetworkCoordinatorSocketHandler::ConnectSuccess(), and Receive_CLIENT_MAP_OK().

◆ GetPeerPublicKey()

std::string_view ServerNetworkGameSocketHandler::GetPeerPublicKey ( ) const
inline

Definition at line 119 of file network_server.h.

◆ Receive_CLIENT_ACK()

NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_ACK ( Packet p)
overrideprotectedvirtual

Tell the server we are done with this frame: uint32_t Current frame counter of the client.

uint8_t The random token that the server sent in the PACKET_SERVER_FRAME packet.

Parameters
pThe packet that was just received.

Reimplemented from NetworkGameSocketHandler.

Definition at line 1199 of file network_server.cpp.

References _frame_counter, NetworkGameSocketHandler::client_id, Ticks::DAY_TICKS, Debug, IConsoleCmdExec(), NetworkGameSocketHandler::last_frame, NetworkGameSocketHandler::last_frame_server, last_token, last_token_frame, NETWORK_RECV_STATUS_OKAY, Packet::Recv_uint32(), Packet::Recv_uint8(), SendError(), status, STATUS_ACTIVE, STATUS_AUTHORIZED, and STATUS_PRE_ACTIVE.

◆ Receive_CLIENT_AUTH_RESPONSE()

NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_AUTH_RESPONSE ( Packet p)
overrideprotectedvirtual

◆ Receive_CLIENT_CHAT()

NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_CHAT ( Packet p)
overrideprotectedvirtual

Sends a chat-packet to the server: uint8_t ID of the action (see NetworkAction).

uint8_t ID of the destination type (see DestType). uint32_t ID of the client or company (destination of the chat). string Message (max NETWORK_CHAT_LENGTH). uint64_t data (used e.g. for 'give money' actions).

Parameters
pThe packet that was just received.

Reimplemented from NetworkGameSocketHandler.

Definition at line 1384 of file network_server.cpp.

References CC_WARNING, NetworkGameSocketHandler::client_id, NetworkClientInfo::client_id, Debug, NetworkGameSocketHandler::GetInfo(), IConsolePrint(), NETWORK_CHAT_LENGTH, NETWORK_RECV_STATUS_OKAY, NetworkServerSendChat(), Packet::Recv_string(), Packet::Recv_uint32(), Packet::Recv_uint64(), Packet::Recv_uint8(), SendError(), status, and STATUS_PRE_ACTIVE.

◆ Receive_CLIENT_COMMAND()

NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_COMMAND ( Packet p)
overrideprotectedvirtual

The client has done a command and wants us to handle it.

Parameters
pthe packet in which the command was sent

Only CMD_COMPANY_CTRL is always allowed, for the rest, playas needs to match the company in the packet. If it doesn't, the client has done something pretty naughty (or a bug), and will be kicked

Reimplemented from NetworkGameSocketHandler.

Definition at line 1059 of file network_server.cpp.

References _settings_client, CC_WARNING, CCA_NEW, NetworkGameSocketHandler::client_id, NetworkClientInfo::client_id, CLIENT_ID_SERVER, NetworkClientInfo::client_playas, CommandPacket::cmd, CMD_CLIENT_ID, CMD_COMPANY_ALLOW_LIST_CTRL, CMD_COMPANY_CTRL, CMD_SERVER, CMD_SPECTATOR, CommandPacket::company, COMPANY_NEW_COMPANY, COMPANY_SPECTATOR, CommandPacket::data, Debug, DESTTYPE_CLIENT, GetCommandFlags(), NetworkGameSocketHandler::GetInfo(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_company_pool >::GetNumItems(), NetworkSocketHandler::HasClientQuit(), IConsolePrint(), NetworkGameSocketHandler::incoming_queue, NetworkGameSocketHandler::info, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_company_pool >::IsValidID(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_networkclientinfo_pool >::Iterate(), NetworkSettings::max_commands_in_queue, NetworkSettings::max_companies, ClientSettings::network, NETWORK_RECV_STATUS_CLIENT_QUIT, NETWORK_RECV_STATUS_OKAY, NetworkReplaceCommandClientId(), NetworkServerSendChat(), NetworkClientInfo::public_key, NetworkGameSocketHandler::ReceiveCommand(), and SendError().

◆ Receive_CLIENT_ERROR()

NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_ERROR ( Packet p)
overrideprotectedvirtual

◆ Receive_CLIENT_GAME_INFO()

NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_GAME_INFO ( Packet p)
overrideprotectedvirtual

Request game information.

Parameters
pThe packet that was just received.

Reimplemented from NetworkGameSocketHandler.

Definition at line 832 of file network_server.cpp.

References NetworkGameSocketHandler::client_id, Debug, and SendGameInfo().

◆ Receive_CLIENT_GETMAP()

NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_GETMAP ( Packet p)
overrideprotectedvirtual

◆ Receive_CLIENT_IDENTIFY()

NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_IDENTIFY ( Packet p)
overrideprotectedvirtual

The client tells the server about the identity of the client: string Name of the client (max NETWORK_NAME_LENGTH).

uint8_t ID of the company to play as (1..MAX_COMPANIES, or COMPANY_SPECTATOR).

Parameters
pThe packet that was just received.

Reimplemented from NetworkGameSocketHandler.

Definition at line 877 of file network_server.cpp.

References _settings_client, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_networkclientinfo_pool >::CanAllocateItem(), NetworkGameSocketHandler::client_id, NetworkClientInfo::client_name, NetworkClientInfo::client_playas, COMPANY_NEW_COMPANY, COMPANY_SPECTATOR, TimerGameEconomy::date, TimerGameEconomy::date_fract, Debug, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_company_pool >::Get(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_company_pool >::GetIfValid(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_company_pool >::GetNumItems(), NetworkSocketHandler::HasClientQuit(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, Company::IsValidHumanID(), NetworkClientInfo::join_date, NetworkSettings::max_companies, CompanyProperties::months_empty, ClientSettings::network, NETWORK_CLIENT_NAME_LENGTH, NETWORK_RECV_STATUS_CLIENT_QUIT, NetworkIsValidClientName(), NetworkMakeClientNameUnique(), peer_public_key, NetworkClientInfo::public_key, Packet::Recv_string(), Packet::Recv_uint8(), SendError(), SendNewGRFCheck(), NetworkGameSocketHandler::SetInfo(), status, and STATUS_IDENTIFY.

◆ Receive_CLIENT_JOIN()

NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_JOIN ( Packet p)
overrideprotectedvirtual

Try to join the server: string OpenTTD revision (norev0000 if no revision).

uint32_t NewGRF version (added in 1.2). string Name of the client (max NETWORK_NAME_LENGTH) (removed in 15). uint8_t ID of the company to play as (1..MAX_COMPANIES) (removed in 15). uint8_t ID of the clients Language (removed in 15). string Client's unique identifier (removed in 1.0).

Parameters
pThe packet that was just received.

Reimplemented from NetworkGameSocketHandler.

Definition at line 851 of file network_server.cpp.

References _settings_client, NetworkGameSocketHandler::client_id, NetworkServerGameInfo::clients_on, Debug, NetworkSettings::max_clients, ClientSettings::network, NETWORK_REVISION_LENGTH, Packet::Recv_string(), Packet::Recv_uint32(), SendAuthRequest(), SendError(), status, and STATUS_INACTIVE.

◆ Receive_CLIENT_MAP_OK()

◆ Receive_CLIENT_MOVE()

NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_MOVE ( Packet p)
overrideprotectedvirtual

Request the server to move this client into another company: uint8_t ID of the company the client wants to join.

Parameters
pThe packet that was just received.

Reimplemented from NetworkGameSocketHandler.

Definition at line 1474 of file network_server.cpp.

References NetworkGameSocketHandler::client_id, COMPANY_SPECTATOR, Debug, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_company_pool >::Get(), Company::IsValidHumanID(), NETWORK_RECV_STATUS_OKAY, NetworkServerDoMove(), Packet::Recv_uint8(), SendError(), status, and STATUS_ACTIVE.

◆ Receive_CLIENT_NEWGRFS_CHECKED()

NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_NEWGRFS_CHECKED ( Packet p)
overrideprotectedvirtual

Tell the server that we have the required GRFs.

Parameters
pThe packet that was just received.

Reimplemented from NetworkGameSocketHandler.

Definition at line 839 of file network_server.cpp.

References NetworkGameSocketHandler::client_id, Debug, SendError(), SendWelcome(), status, and STATUS_NEWGRFS_CHECK.

◆ Receive_CLIENT_QUIT()

◆ Receive_CLIENT_RCON()

NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_RCON ( Packet p)
overrideprotectedvirtual

◆ Receive_CLIENT_SET_NAME()

◆ ReceivePacket()

std::unique_ptr< Packet > ServerNetworkGameSocketHandler::ReceivePacket ( )
overridevirtual

Receives a packet for the given client.

Returns
The received packet (or nullptr when it didn't receive one)

Reimplemented from NetworkTCPSocketHandler.

Definition at line 223 of file network_server.cpp.

References receive_limit, and NetworkTCPSocketHandler::ReceivePacket().

◆ Send()

void ServerNetworkGameSocketHandler::Send ( )
static

◆ SendAuthRequest()

◆ SendChat()

NetworkRecvStatus ServerNetworkGameSocketHandler::SendChat ( NetworkAction  action,
ClientID  client_id,
bool  self_send,
const std::string &  msg,
int64_t  data 
)

Send a chat message.

Parameters
actionThe action associated with the message.
client_idThe origin of the chat message.
self_sendWhether we did send the message.
msgThe actual message.
dataArbitrary extra data.

Definition at line 685 of file network_server.cpp.

References NetworkGameSocketHandler::client_id, Debug, NETWORK_RECV_STATUS_OKAY, PACKET_SERVER_CHAT, NetworkTCPSocketHandler::SendPacket(), status, and STATUS_PRE_ACTIVE.

◆ SendClientInfo()

NetworkRecvStatus ServerNetworkGameSocketHandler::SendClientInfo ( NetworkClientInfo ci)

◆ SendCommand()

NetworkRecvStatus ServerNetworkGameSocketHandler::SendCommand ( const CommandPacket cp)

◆ SendConfigUpdate()

◆ SendEnableEncryption()

NetworkRecvStatus ServerNetworkGameSocketHandler::SendEnableEncryption ( )
protected

Notify the client that the authentication has completed and tell that for the remainder of this socket encryption is enabled.

Definition at line 463 of file network_server.cpp.

References authentication_handler, NetworkGameSocketHandler::client_id, CloseConnection(), Debug, NETWORK_RECV_STATUS_MALFORMED_PACKET, NETWORK_RECV_STATUS_OKAY, PACKET_SERVER_ENABLE_ENCRYPTION, NetworkTCPSocketHandler::SendPacket(), status, and STATUS_AUTH_GAME.

Referenced by Receive_CLIENT_AUTH_RESPONSE().

◆ SendError()

◆ SendErrorQuit()

NetworkRecvStatus ServerNetworkGameSocketHandler::SendErrorQuit ( ClientID  client_id,
NetworkErrorCode  errorno 
)

Tell the client another client quit with an error.

Parameters
client_idThe client that quit.
errornoThe reason the client quit.

Definition at line 732 of file network_server.cpp.

References NetworkGameSocketHandler::client_id, Debug, NETWORK_RECV_STATUS_OKAY, PACKET_SERVER_ERROR_QUIT, and NetworkTCPSocketHandler::SendPacket().

◆ SendExternalChat()

NetworkRecvStatus ServerNetworkGameSocketHandler::SendExternalChat ( const std::string &  source,
TextColour  colour,
const std::string &  user,
const std::string &  msg 
)

Send a chat message from external source.

Parameters
sourceName of the source this message came from.
colourTextColour to use for the message.
userName of the user who sent the messsage.
msgThe actual message.

Definition at line 710 of file network_server.cpp.

References NetworkGameSocketHandler::client_id, Debug, NETWORK_RECV_STATUS_OKAY, PACKET_SERVER_EXTERNAL_CHAT, NetworkTCPSocketHandler::SendPacket(), status, and STATUS_PRE_ACTIVE.

◆ SendFrame()

NetworkRecvStatus ServerNetworkGameSocketHandler::SendFrame ( )

Tell the client that they may run to a particular frame.

Definition at line 621 of file network_server.cpp.

References _frame_counter, _frame_counter_max, _sync_seed_1, last_token, NETWORK_RECV_STATUS_OKAY, PACKET_SERVER_FRAME, and NetworkTCPSocketHandler::SendPacket().

Referenced by Receive_CLIENT_MAP_OK().

◆ SendGameInfo()

NetworkRecvStatus ServerNetworkGameSocketHandler::SendGameInfo ( )
protected

Send the client information about the server.

Definition at line 343 of file network_server.cpp.

References NetworkGameSocketHandler::client_id, Debug, NETWORK_RECV_STATUS_OKAY, PACKET_SERVER_GAME_INFO, NetworkTCPSocketHandler::SendPacket(), and TCP_MTU.

Referenced by Receive_CLIENT_GAME_INFO().

◆ SendJoin()

NetworkRecvStatus ServerNetworkGameSocketHandler::SendJoin ( ClientID  client_id)

Tell that a client joined.

Parameters
client_idThe client that joined.

Definition at line 608 of file network_server.cpp.

References NetworkGameSocketHandler::client_id, Debug, NETWORK_RECV_STATUS_OKAY, PACKET_SERVER_JOIN, and NetworkTCPSocketHandler::SendPacket().

◆ SendMap()

◆ SendMove()

NetworkRecvStatus ServerNetworkGameSocketHandler::SendMove ( ClientID  client_id,
CompanyID  company_id 
)

Tell that a client moved to another company.

Parameters
client_idThe client that moved.
company_idThe company the client moved to.

Definition at line 803 of file network_server.cpp.

References NetworkGameSocketHandler::client_id, Debug, NETWORK_RECV_STATUS_OKAY, PACKET_SERVER_MOVE, and NetworkTCPSocketHandler::SendPacket().

◆ SendNewGame()

NetworkRecvStatus ServerNetworkGameSocketHandler::SendNewGame ( )

Tell the client we're starting a new game.

Definition at line 772 of file network_server.cpp.

References NetworkGameSocketHandler::client_id, Debug, NETWORK_RECV_STATUS_OKAY, PACKET_SERVER_NEWGAME, and NetworkTCPSocketHandler::SendPacket().

◆ SendNewGRFCheck()

◆ SendQuit()

NetworkRecvStatus ServerNetworkGameSocketHandler::SendQuit ( ClientID  client_id)

Tell the client another client quit.

Parameters
client_idThe client that quit.

Definition at line 749 of file network_server.cpp.

References NetworkGameSocketHandler::client_id, Debug, NETWORK_RECV_STATUS_OKAY, PACKET_SERVER_QUIT, and NetworkTCPSocketHandler::SendPacket().

◆ SendRConResult()

NetworkRecvStatus ServerNetworkGameSocketHandler::SendRConResult ( uint16_t  colour,
const std::string &  command 
)

Send the result of a console action.

Parameters
colourThe colour of the result.
commandThe command that was executed.

Definition at line 786 of file network_server.cpp.

References NetworkGameSocketHandler::client_id, Debug, NETWORK_RECV_STATUS_OKAY, PACKET_SERVER_RCON, and NetworkTCPSocketHandler::SendPacket().

◆ SendShutdown()

NetworkRecvStatus ServerNetworkGameSocketHandler::SendShutdown ( )

◆ SendSync()

NetworkRecvStatus ServerNetworkGameSocketHandler::SendSync ( )

◆ SendWait()

◆ SendWelcome()

Field Documentation

◆ authentication_handler

std::unique_ptr<class NetworkAuthenticationServerHandler> ServerNetworkGameSocketHandler::authentication_handler
protected

The handler for the authentication.

Definition at line 26 of file network_server.h.

Referenced by Receive_CLIENT_AUTH_RESPONSE(), SendAuthRequest(), and SendEnableEncryption().

◆ client_address

NetworkAddress ServerNetworkGameSocketHandler::client_address

IP-address of the client (so they can be banned)

Definition at line 75 of file network_server.h.

Referenced by AcceptConnection(), and GetClientIP().

◆ lag_test

uint8_t ServerNetworkGameSocketHandler::lag_test

Byte used for lag-testing the client.

Definition at line 67 of file network_server.h.

◆ last_token

uint8_t ServerNetworkGameSocketHandler::last_token

The last random token we did send to verify the client is listening.

Definition at line 68 of file network_server.h.

Referenced by Receive_CLIENT_ACK(), and SendFrame().

◆ last_token_frame

uint32_t ServerNetworkGameSocketHandler::last_token_frame

The last frame we received the right token.

Definition at line 69 of file network_server.h.

Referenced by Receive_CLIENT_ACK().

◆ outgoing_queue

CommandQueue ServerNetworkGameSocketHandler::outgoing_queue

The command-queue awaiting delivery; conceptually more a bucket to gather commands in, after which the whole bucket is sent to the client.

Definition at line 71 of file network_server.h.

◆ peer_public_key

std::string ServerNetworkGameSocketHandler::peer_public_key
protected

The public key of our client.

Definition at line 27 of file network_server.h.

Referenced by Receive_CLIENT_AUTH_RESPONSE(), and Receive_CLIENT_IDENTIFY().

◆ receive_limit

size_t ServerNetworkGameSocketHandler::receive_limit

Amount of bytes that we can receive at this moment.

Definition at line 72 of file network_server.h.

Referenced by ReceivePacket(), and ServerNetworkGameSocketHandler().

◆ savegame

std::shared_ptr<struct PacketWriter> ServerNetworkGameSocketHandler::savegame

Writer used to write the savegame.

Definition at line 74 of file network_server.h.

Referenced by CloseConnection(), SendMap(), and ~ServerNetworkGameSocketHandler().

◆ status


The documentation for this class was generated from the following files: