OpenTTD Source 20251019-master-g9f7f314f81
network_gui.cpp File Reference

Implementation of the Network related GUIs. More...

#include "../stdafx.h"
#include "../strings_func.h"
#include "../fios.h"
#include "network_client.h"
#include "network_gui.h"
#include "network_gamelist.h"
#include "network.h"
#include "network_base.h"
#include "network_content.h"
#include "network_server.h"
#include "network_coordinator.h"
#include "network_survey.h"
#include "../gui.h"
#include "network_udp.h"
#include "../window_func.h"
#include "../gfx_func.h"
#include "../dropdown_type.h"
#include "../dropdown_func.h"
#include "../querystring_gui.h"
#include "../sortlist_type.h"
#include "../company_func.h"
#include "../command_func.h"
#include "../core/geometry_func.hpp"
#include "../genworld.h"
#include "../map_type.h"
#include "../zoom_func.h"
#include "../sprite.h"
#include "../settings_internal.h"
#include "../company_cmd.h"
#include "../timer/timer.h"
#include "../timer/timer_window.h"
#include "../timer/timer_game_calendar.h"
#include "../textfile_gui.h"
#include "../stringfilter_type.h"
#include "../core/string_consumer.hpp"
#include "../widgets/network_widget.h"
#include "table/strings.h"
#include "../table/sprites.h"
#include "../safeguards.h"

Go to the source code of this file.

Data Structures

class  NWidgetServerListHeader
 Full blown container to make it behave exactly as we want :) More...
 
class  NetworkGameWindow
 
struct  NetworkStartServerWindow
 
class  ButtonCommon
 Button shown for either a company or client in the client-list. More...
 
class  Button< T >
 Template version of Button, with callback support. More...
 
class  ButtonLine
 Base interface for a network client list line. More...
 
class  CompanyButtonLine
 
class  ClientButtonLine
 
struct  NetworkClientListWindow
 Main handle for clientlist. More...
 
struct  NetworkJoinStatusWindow
 
struct  NetworkAskRelayWindow
 Window used for asking the user if he is okay using a relay server. More...
 
struct  NetworkAskSurveyWindow
 Window used for asking if the user wants to participate in the automated survey. More...
 
struct  SurveyResultTextfileWindow
 Window for displaying the textfile of a survey result. More...
 

Typedefs

typedef GUIList< NetworkGame *, std::nullptr_t, StringFilter & > GUIGameServerList
 
typedef int ServerListPosition
 
using CompanyButton = Button< CompanyID >
 
using ClientButton = Button< ClientID >
 

Enumerations

enum  DropDownAdmin : uint8_t { DD_CLIENT_ADMIN_KICK , DD_CLIENT_ADMIN_BAN , DD_COMPANY_ADMIN_RESET }
 The possibly entries in a DropDown for an admin. More...
 

Functions

static void ShowNetworkStartServerWindow ()
 
void UpdateNetworkGameWindow ()
 Update the network new window because a new server is found on the network.
 
static DropDownList BuildVisibilityDropDownList ()
 
static std::unique_ptr< NWidgetBaseMakeResizableHeader ()
 
void ShowNetworkGameWindow ()
 
void DrawCompanyIcon (CompanyID cid, int x, int y)
 Draw the icon of a company.
 
static void AdminClientKickCallback (Window *, bool confirmed)
 Callback function for admin command to kick client.
 
static void AdminClientBanCallback (Window *, bool confirmed)
 Callback function for admin command to ban client.
 
static void AdminCompanyResetCallback (Window *, bool confirmed)
 Callback function for admin command to reset company.
 
void ShowClientList ()
 
void ShowJoinStatusWindow ()
 
void ShowNetworkNeedPassword (std::shared_ptr< NetworkAuthenticationPasswordRequest > request)
 
void ShowNetworkAskRelay (std::string_view server_connection_string, std::string &&relay_connection_string, std::string &&token)
 Show a modal confirmation window with "no" / "yes, once" / "yes, always" buttons.
 
void ShowNetworkAskSurvey ()
 Show a modal confirmation window with "no" / "preview" / "yes" buttons.
 
void ShowSurveyResultTextfileWindow (Window *parent)
 

Variables

static ClientID _admin_client_id = INVALID_CLIENT_ID
 For what client a confirmation window is open.
 
static CompanyID _admin_company_id = CompanyID::Invalid()
 For what company a confirmation window is open.
 
static const ServerListPosition SLP_INVALID = -1
 
static constexpr NWidgetPart _nested_network_game_widgets []
 
static WindowDesc _network_game_window_desc (WDP_CENTER, "list_servers", 1000, 730, WC_NETWORK_WINDOW, WC_NONE, {}, _nested_network_game_widgets)
 
static constexpr NWidgetPart _nested_network_start_server_window_widgets []
 
static WindowDesc _network_start_server_window_desc (WDP_CENTER, {}, 0, 0, WC_NETWORK_WINDOW, WC_NONE, {}, _nested_network_start_server_window_widgets)
 
static constexpr NWidgetPart _nested_client_list_widgets []
 
static WindowDesc _client_list_desc (WDP_AUTO, "list_clients", 220, 300, WC_CLIENT_LIST, WC_NONE, {}, _nested_client_list_widgets)
 
NetworkJoinStatus _network_join_status
 The status of joining.
 
uint8_t _network_join_waiting
 The number of clients waiting in front of us.
 
uint32_t _network_join_bytes
 The number of bytes we already downloaded.
 
uint32_t _network_join_bytes_total
 The total number of bytes to download.
 
static constexpr NWidgetPart _nested_network_join_status_window_widgets []
 
static WindowDesc _network_join_status_window_desc (WDP_CENTER, {}, 0, 0, WC_NETWORK_STATUS_WINDOW, WC_NONE, WindowDefaultFlag::Modal, _nested_network_join_status_window_widgets)
 
static constexpr NWidgetPart _nested_network_ask_relay_widgets []
 
static WindowDesc _network_ask_relay_desc (WDP_CENTER, {}, 0, 0, WC_NETWORK_ASK_RELAY, WC_NONE, WindowDefaultFlag::Modal, _nested_network_ask_relay_widgets)
 
static constexpr NWidgetPart _nested_network_ask_survey_widgets []
 
static WindowDesc _network_ask_survey_desc (WDP_CENTER, {}, 0, 0, WC_NETWORK_ASK_SURVEY, WC_NONE, WindowDefaultFlag::Modal, _nested_network_ask_survey_widgets)
 

Detailed Description

Implementation of the Network related GUIs.

Definition in file network_gui.cpp.

Typedef Documentation

◆ ClientButton

Definition at line 1382 of file network_gui.cpp.

◆ CompanyButton

Definition at line 1381 of file network_gui.cpp.

◆ GUIGameServerList

typedef GUIList<NetworkGame*, std::nullptr_t, StringFilter&> GUIGameServerList

Definition at line 82 of file network_gui.cpp.

◆ ServerListPosition

typedef int ServerListPosition

Definition at line 83 of file network_gui.cpp.

Enumeration Type Documentation

◆ DropDownAdmin

enum DropDownAdmin : uint8_t

The possibly entries in a DropDown for an admin.

Client and companies are mixed; they just have to be unique.

Definition at line 1284 of file network_gui.cpp.

Function Documentation

◆ AdminClientBanCallback()

static void AdminClientBanCallback ( Window ,
bool  confirmed 
)
static

Callback function for admin command to ban client.

Parameters
confirmedIff the user pressed Yes.

Definition at line 1303 of file network_gui.cpp.

References _admin_client_id, and NetworkServerKickOrBanIP().

Referenced by NetworkClientListWindow::OnDropdownSelect().

◆ AdminClientKickCallback()

static void AdminClientKickCallback ( Window ,
bool  confirmed 
)
static

Callback function for admin command to kick client.

Parameters
confirmedIff the user pressed Yes.

Definition at line 1294 of file network_gui.cpp.

References _admin_client_id, and NetworkServerKickClient().

Referenced by NetworkClientListWindow::OnDropdownSelect().

◆ AdminCompanyResetCallback()

static void AdminCompanyResetCallback ( Window ,
bool  confirmed 
)
static

Callback function for admin command to reset company.

Parameters
confirmedIff the user pressed Yes.

Definition at line 1312 of file network_gui.cpp.

References _admin_company_id, CCA_DELETE, CRR_MANUAL, INVALID_CLIENT_ID, and NetworkCompanyHasClients().

Referenced by NetworkClientListWindow::OnDropdownSelect().

◆ BuildVisibilityDropDownList()

static DropDownList BuildVisibilityDropDownList ( )
static

Definition at line 71 of file network_gui.cpp.

◆ DrawCompanyIcon()

void DrawCompanyIcon ( CompanyID  c,
int  x,
int  y 
)
extern

◆ MakeResizableHeader()

static std::unique_ptr< NWidgetBase > MakeResizableHeader ( )
static

Definition at line 852 of file network_gui.cpp.

◆ ShowClientList()

void ShowClientList ( )

Definition at line 1982 of file network_gui.cpp.

◆ ShowJoinStatusWindow()

void ShowJoinStatusWindow ( )

Definition at line 2118 of file network_gui.cpp.

◆ ShowNetworkAskRelay()

void ShowNetworkAskRelay ( std::string_view  server_connection_string,
std::string &&  relay_connection_string,
std::string &&  token 
)

Show a modal confirmation window with "no" / "yes, once" / "yes, always" buttons.

Parameters
server_connection_stringThe game server we want to connect to.
relay_connection_stringThe relay server we want to connect to.
tokenThe token for this connection.

Definition at line 2231 of file network_gui.cpp.

References CloseWindowByClass(), GetMainWindow(), NRWCD_HANDLED, and WC_NETWORK_ASK_RELAY.

Referenced by ClientNetworkCoordinatorSocketHandler::Receive_GC_TURN_CONNECT().

◆ ShowNetworkAskSurvey()

void ShowNetworkAskSurvey ( )

Show a modal confirmation window with "no" / "preview" / "yes" buttons.

Definition at line 2326 of file network_gui.cpp.

References CloseWindowByClass(), GetMainWindow(), and WC_NETWORK_ASK_SURVEY.

◆ ShowNetworkGameWindow()

void ShowNetworkGameWindow ( )

Definition at line 941 of file network_gui.cpp.

◆ ShowNetworkNeedPassword()

void ShowNetworkNeedPassword ( std::shared_ptr< NetworkAuthenticationPasswordRequest request)

Definition at line 2124 of file network_gui.cpp.

◆ ShowNetworkStartServerWindow()

static void ShowNetworkStartServerWindow ( )
static

Definition at line 1206 of file network_gui.cpp.

◆ ShowSurveyResultTextfileWindow()

void ShowSurveyResultTextfileWindow ( Window parent)

Definition at line 2351 of file network_gui.cpp.

◆ UpdateNetworkGameWindow()

Variable Documentation

◆ _admin_client_id

ClientID _admin_client_id = INVALID_CLIENT_ID
static

For what client a confirmation window is open.

Definition at line 59 of file network_gui.cpp.

Referenced by AdminClientBanCallback(), AdminClientKickCallback(), and NetworkClientListWindow::OnDropdownSelect().

◆ _admin_company_id

CompanyID _admin_company_id = CompanyID::Invalid()
static

For what company a confirmation window is open.

Definition at line 60 of file network_gui.cpp.

Referenced by AdminCompanyResetCallback(), and NetworkClientListWindow::OnDropdownSelect().

◆ _nested_client_list_widgets

constexpr NWidgetPart _nested_client_list_widgets[]
staticconstexpr

Definition at line 1220 of file network_gui.cpp.

◆ _nested_network_ask_relay_widgets

constexpr NWidgetPart _nested_network_ask_relay_widgets[]
staticconstexpr
Initial value:
= {
NWidget(WWT_CLOSEBOX, COLOUR_RED),
NWidget(WWT_CAPTION, COLOUR_RED, WID_NAR_CAPTION), SetStringTip(STR_NETWORK_ASK_RELAY_CAPTION),
NWidget(WWT_PANEL, COLOUR_RED),
NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_NAR_NO), SetMinimalSize(71, 12), SetFill(1, 1), SetStringTip(STR_NETWORK_ASK_RELAY_NO),
NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_NAR_YES_ONCE), SetMinimalSize(71, 12), SetFill(1, 1), SetStringTip(STR_NETWORK_ASK_RELAY_YES_ONCE),
NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_NAR_YES_ALWAYS), SetMinimalSize(71, 12), SetFill(1, 1), SetStringTip(STR_NETWORK_ASK_RELAY_YES_ALWAYS),
}
static const WidgetDimensions unscaled
Unscaled widget dimensions.
Definition window_gui.h:93
@ SA_HOR_CENTER
Horizontally center the text.
Definition gfx_type.h:389
constexpr NWidgetPart SetFill(uint16_t fill_x, uint16_t fill_y)
Widget part function for setting filling.
constexpr NWidgetPart SetPIP(uint8_t pre, uint8_t inter, uint8_t post)
Widget part function for setting a pre/inter/post spaces.
constexpr NWidgetPart SetPadding(uint8_t top, uint8_t right, uint8_t bottom, uint8_t left)
Widget part function for setting additional space around a widget.
constexpr NWidgetPart SetStringTip(StringID string, StringID tip={})
Widget part function for setting the string and tooltip.
constexpr NWidgetPart SetMinimalSize(int16_t x, int16_t y)
Widget part function for setting the minimal size.
constexpr NWidgetPart EndContainer()
Widget part function for denoting the end of a container (horizontal, vertical, WWT_FRAME,...
constexpr NWidgetPart NWidget(WidgetType tp, Colours col, WidgetID idx=INVALID_WIDGET)
Widget part function for starting a new 'real' widget.
constexpr NWidgetPart SetAlignment(StringAlignment align)
Widget part function for setting the alignment of text/images.
@ WID_NAR_YES_ALWAYS
"Yes, always" button.
@ WID_NAR_TEXT
Text in the window.
@ WID_NAR_YES_ONCE
"Yes, once" button.
@ WID_NAR_NO
"No" button.
@ WID_NAR_CAPTION
Caption of the window.
@ WWT_PUSHTXTBTN
Normal push-button (no toggle button) with text caption.
@ NWID_HORIZONTAL
Horizontal container.
Definition widget_type.h:67
@ WWT_PANEL
Simple depressed panel.
Definition widget_type.h:40
@ WWT_CAPTION
Window caption (window title between closebox and stickybox)
Definition widget_type.h:53
@ NWID_VERTICAL
Vertical container.
Definition widget_type.h:69
@ WWT_CLOSEBOX
Close box (at top-left of a window)
Definition widget_type.h:61
@ WWT_TEXT
Pure simple text.
Definition widget_type.h:50
@ EqualSize
Containers should keep all their (resizing) children equally large.

Definition at line 2201 of file network_gui.cpp.

◆ _nested_network_ask_survey_widgets

constexpr NWidgetPart _nested_network_ask_survey_widgets[]
staticconstexpr
Initial value:
= {
NWidget(WWT_CLOSEBOX, COLOUR_GREY),
NWidget(WWT_CAPTION, COLOUR_GREY, WID_NAS_CAPTION), SetStringTip(STR_NETWORK_ASK_SURVEY_CAPTION),
NWidget(WWT_PANEL, COLOUR_GREY),
NWidget(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NAS_PREVIEW), SetMinimalSize(71, 12), SetFill(1, 1), SetStringTip(STR_NETWORK_ASK_SURVEY_PREVIEW),
NWidget(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NAS_LINK), SetMinimalSize(71, 12), SetFill(1, 1), SetStringTip(STR_NETWORK_ASK_SURVEY_LINK),
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_NAS_NO), SetMinimalSize(71, 12), SetFill(1, 1), SetStringTip(STR_NETWORK_ASK_SURVEY_NO),
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_NAS_YES), SetMinimalSize(71, 12), SetFill(1, 1), SetStringTip(STR_NETWORK_ASK_SURVEY_YES),
}
@ WID_NAS_YES
"Yes" button.
@ WID_NAS_LINK
"Details & Privacy" button.
@ WID_NAS_TEXT
Text in the window.
@ WID_NAS_CAPTION
Caption of the window.
@ WID_NAS_NO
"No" button.
@ WID_NAS_PREVIEW
"Preview" button.

Definition at line 2296 of file network_gui.cpp.

◆ _nested_network_game_widgets

constexpr NWidgetPart _nested_network_game_widgets[]
staticconstexpr

Definition at line 857 of file network_gui.cpp.

◆ _nested_network_join_status_window_widgets

constexpr NWidgetPart _nested_network_join_status_window_widgets[]
staticconstexpr
Initial value:
= {
NWidget(WWT_CAPTION, COLOUR_GREY), SetStringTip(STR_NETWORK_CONNECTING_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS),
NWidget(WWT_PANEL, COLOUR_GREY),
NWidget(WWT_EMPTY, INVALID_COLOUR, WID_NJS_PROGRESS_BAR), SetFill(1, 0),
NWidget(WWT_EMPTY, INVALID_COLOUR, WID_NJS_PROGRESS_TEXT), SetFill(1, 0), SetMinimalSize(350, 0),
NWidget(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NJS_CANCELOK), SetMinimalSize(101, 12), SetStringTip(STR_NETWORK_CONNECTION_DISCONNECT), SetFill(1, 0),
}
@ WID_NJS_PROGRESS_BAR
Simple progress bar.
@ WID_NJS_PROGRESS_TEXT
Text explaining what is happening.
@ WID_NJS_CANCELOK
Cancel / OK button.
@ WWT_EMPTY
Empty widget, place holder to reserve space in widget tree.
Definition widget_type.h:38

Definition at line 2100 of file network_gui.cpp.

◆ _nested_network_start_server_window_widgets

constexpr NWidgetPart _nested_network_start_server_window_widgets[]
staticconstexpr

Definition at line 1132 of file network_gui.cpp.

◆ _network_join_bytes

uint32_t _network_join_bytes

◆ _network_join_bytes_total

uint32_t _network_join_bytes_total

◆ _network_join_status

◆ _network_join_waiting

uint8_t _network_join_waiting

The number of clients waiting in front of us.

Definition at line 1988 of file network_gui.cpp.

Referenced by NetworkJoinStatusWindow::DrawWidget(), and ClientNetworkGameSocketHandler::Receive_SERVER_WAIT().

◆ SLP_INVALID

const ServerListPosition SLP_INVALID = -1
static

Definition at line 84 of file network_gui.cpp.