OpenTTD Source  14.0-beta3
network_client.cpp File Reference
#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...
 

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, const std::string &pass)
 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...
 
void NetworkClientSetCompanyPassword (const std::string &password)
 Set/Reset company password on the client side. 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 uint32_t _password_game_seed
 One bit of 'entropy' used to generate a salt for the company passwords.
 
static std::string _password_server_id
 The other bit of 'entropy' used to generate a salt for the company passwords.
 
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,
const std::string &  pass 
)

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.
passthe password, is only checked on the server end if a password is needed.
Returns
void

Definition at line 1273 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 1380 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 1262 of file network_client.cpp.

References ClientNetworkGameSocketHandler::SendRCon().

◆ NetworkClientSetCompanyPassword()

void NetworkClientSetCompanyPassword ( const std::string &  password)

Set/Reset company password on the client side.

Parameters
passwordPassword to be set.

Definition at line 1389 of file network_client.cpp.

References ClientNetworkGameSocketHandler::SendSetPassword().

Referenced by NetworkChangeCompanyPassword().

◆ 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 1282 of file network_client.cpp.

References _current_company.

◆ 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 1304 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 1415 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 1424 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 1351 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 1326 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 1342 of file network_client.cpp.

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

Referenced by NetworkClientConnectGame().