OpenTTD Source  20241108-master-g80f628063a
network_client.cpp File Reference

Client part of the network protocol. More...

#include "../stdafx.h"
#include "network_gui.h"
#include "../saveload/saveload.h"
#include "../saveload/saveload_filter.h"
#include "../command_func.h"
#include "../console_func.h"
#include "../strings_func.h"
#include "../window_func.h"
#include "../company_func.h"
#include "../company_base.h"
#include "../company_gui.h"
#include "../company_cmd.h"
#include "../core/random_func.hpp"
#include "../timer/timer_game_tick.h"
#include "../timer/timer_game_calendar.h"
#include "../gfx_func.h"
#include "../error.h"
#include "../rev.h"
#include "network.h"
#include "network_base.h"
#include "network_client.h"
#include "network_gamelist.h"
#include "../core/backup_type.hpp"
#include "../thread.h"
#include "../social_integration.h"
#include "table/strings.h"
#include "../safeguards.h"

Go to the source code of this file.

Data Structures

struct  PacketReader
 Read some packets, and when do use that data as initial load filter. More...
 
class  ClientGamePasswordRequestHandler
 

Functions

void ClientNetworkEmergencySave ()
 Create an emergency savegame when the network connection is lost.
 
bool SafeLoad (const std::string &filename, SaveLoadOperation fop, DetailedFileType dft, GameMode newgm, Subdirectory subdir, std::shared_ptr< struct LoadFilter > lf)
 
void NetworkClient_Connected ()
 Is called after a client is connected to the server.
 
void NetworkClientSendRcon (const std::string &password, const std::string &command)
 Send a remote console command. More...
 
void NetworkClientRequestMove (CompanyID company_id)
 Notify the server of this client wanting to be moved to another company. More...
 
void NetworkClientsToSpectators (CompanyID cid)
 Move the clients of a company to the spectators. More...
 
bool NetworkIsValidClientName (const std::string_view client_name)
 Check whether the given client name is deemed valid for use in network games. More...
 
bool NetworkValidateClientName (std::string &client_name)
 Trim the given client name in place, i.e. More...
 
bool NetworkValidateOurClientName ()
 Convenience method for NetworkValidateClientName on _settings_client.network.client_name. More...
 
void NetworkUpdateClientName (const std::string &client_name)
 Send the server our name as callback from the setting. More...
 
void NetworkClientSendChat (NetworkAction action, DestType type, int dest, const std::string &msg, int64_t data)
 Send a chat message. More...
 
bool NetworkClientPreferTeamChat (const NetworkClientInfo *cio)
 Tell whether the client has team members who they can chat to. More...
 
uint NetworkMaxCompaniesAllowed ()
 Get the maximum number of companies that are allowed by the server. More...
 
bool NetworkMaxCompaniesReached ()
 Check if max_companies has been reached on the server (local check only). More...
 

Variables

static uint32_t last_ack_frame
 Last frame we performed an ack.
 
static uint8_t _network_server_max_companies
 Maximum number of companies of the currently joined server.
 
std::string _network_server_name
 The current name of the server you are on.
 
NetworkJoinInfo _network_join
 Information about the game to join to.
 

Detailed Description

Client part of the network protocol.

Definition in file network_client.cpp.

Function Documentation

◆ NetworkClientPreferTeamChat()

bool NetworkClientPreferTeamChat ( const NetworkClientInfo cio)

◆ NetworkClientRequestMove()

void NetworkClientRequestMove ( CompanyID  company_id)

Notify the server of this client wanting to be moved to another company.

Parameters
company_idid of the company the client wishes to be moved to.

Definition at line 1256 of file network_client.cpp.

References ClientNetworkGameSocketHandler::SendMove().

Referenced by NetworkClientListWindow::OnClickCompanyJoin().

◆ NetworkClientSendChat()

void NetworkClientSendChat ( NetworkAction  action,
DestType  type,
int  dest,
const std::string &  msg,
int64_t  data 
)

Send a chat message.

Parameters
actionThe action associated with the message.
typeThe destination type.
destThe destination index, be it a company index or client id.
msgThe actual message.
dataArbitrary extra data.

Definition at line 1363 of file network_client.cpp.

References ClientNetworkGameSocketHandler::SendChat().

◆ NetworkClientSendRcon()

void NetworkClientSendRcon ( const std::string &  password,
const std::string &  command 
)

Send a remote console command.

Parameters
passwordThe password.
commandThe command to execute.

Definition at line 1247 of file network_client.cpp.

References ClientNetworkGameSocketHandler::SendRCon().

◆ NetworkClientsToSpectators()

void NetworkClientsToSpectators ( CompanyID  cid)

Move the clients of a company to the spectators.

Parameters
cidThe company to move the clients of.

Definition at line 1265 of file network_client.cpp.

References _current_company, _local_company, COMPANY_SPECTATOR, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_networkclientinfo_pool >::Iterate(), and SetLocalCompany().

Referenced by ChangeOwnershipOfCompanyItems().

◆ NetworkIsValidClientName()

bool NetworkIsValidClientName ( const std::string_view  client_name)

Check whether the given client name is deemed valid for use in network games.

An empty name (null or '') is not valid as that is essentially no name at all. A name starting with white space is not valid for tab completion purposes.

Parameters
client_nameThe client name to check for validity.
Returns
True iff the name is valid.

Definition at line 1287 of file network_client.cpp.

Referenced by NetworkValidateClientName().

◆ NetworkMaxCompaniesAllowed()

uint NetworkMaxCompaniesAllowed ( )

Get the maximum number of companies that are allowed by the server.

Returns
The number of companies allowed.

Definition at line 1389 of file network_client.cpp.

References _network_server, _network_server_max_companies, _settings_client, NetworkSettings::max_companies, and ClientSettings::network.

Referenced by NetworkMaxCompaniesReached().

◆ NetworkMaxCompaniesReached()

bool NetworkMaxCompaniesReached ( )

Check if max_companies has been reached on the server (local check only).

Returns
true if the max value has been reached or exceeded, false otherwise.

Definition at line 1398 of file network_client.cpp.

References Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_company_pool >::GetNumItems(), and NetworkMaxCompaniesAllowed().

Referenced by NetworkClientListWindow::RebuildList().

◆ NetworkUpdateClientName()

void NetworkUpdateClientName ( const std::string &  client_name)

Send the server our name as callback from the setting.

Parameters
newnameThe new client name.

Definition at line 1334 of file network_client.cpp.

References _network_own_client_id, _network_server, NetworkClientInfo::client_name, NetworkClientInfo::GetByClientID(), NetworkMakeClientNameUnique(), and ClientNetworkGameSocketHandler::SendSetName().

◆ NetworkValidateClientName()

bool NetworkValidateClientName ( std::string &  client_name)

Trim the given client name in place, i.e.

remove leading and trailing spaces. After the trim check whether the client name is valid. A client name is valid whenever the name is not empty and does not start with spaces. This check is done via NetworkIsValidClientName. When the client name is valid, this function returns true. When the client name is not valid a GUI error message is shown telling the user to set the client name and this function returns false.

This function is not suitable for ensuring a valid client name at the server as the error message will then be shown to the host instead of the client.

Parameters
client_nameThe client name to validate. It will be trimmed of leading and trailing spaces.
Returns
True iff the client name is valid.

Definition at line 1309 of file network_client.cpp.

References INVALID_STRING_ID, NetworkIsValidClientName(), ShowErrorMessage(), StrTrimInPlace(), and WL_ERROR.

Referenced by NetworkValidateOurClientName().

◆ NetworkValidateOurClientName()

bool NetworkValidateOurClientName ( )

Convenience method for NetworkValidateClientName on _settings_client.network.client_name.

It trims the client name and checks whether it is empty. When it is empty an error message is shown to the GUI user. See NetworkValidateClientName(char*) for details about the functionality.

Returns
True iff the client name is valid.

Definition at line 1325 of file network_client.cpp.

References _settings_client, NetworkSettings::client_name, ClientSettings::network, and NetworkValidateClientName().

Referenced by NetworkClientConnectGame().