OpenTTD Source  20241108-master-g80f628063a
network_type.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 <http://www.gnu.org/licenses/>.
6  */
7 
10 #ifndef NETWORK_TYPE_H
11 #define NETWORK_TYPE_H
12 
13 #include "../core/enum_type.hpp"
14 
16 static const uint MAX_CLIENTS = 255;
17 
23 static const uint MAX_CLIENT_SLOTS = 256;
24 
29  NETWORK_VEH_TRAIN = 0,
30  NETWORK_VEH_LORRY,
31  NETWORK_VEH_BUS,
32  NETWORK_VEH_PLANE,
33  NETWORK_VEH_SHIP,
34 
35  NETWORK_VEH_END
36 };
37 
42 enum ServerGameType : uint8_t {
43  SERVER_GAME_TYPE_LOCAL = 0,
44  SERVER_GAME_TYPE_PUBLIC,
45  SERVER_GAME_TYPE_INVITE_ONLY,
46 };
47 
49 enum ClientID : uint32_t {
53 };
54 
56 typedef uint8_t ClientIndex;
57 
59 typedef uint8_t AdminIndex;
60 
62 static const AdminIndex MAX_ADMINS = 16;
64 static const AdminIndex INVALID_ADMIN_ID = UINT8_MAX;
65 
68  uint16_t num_vehicle[NETWORK_VEH_END];
69  uint16_t num_station[NETWORK_VEH_END];
70  bool ai;
71 };
72 
73 struct NetworkClientInfo;
74 
79 enum DestType : uint8_t {
83 };
85 
86 
91  NETWORK_ACTION_JOIN,
92  NETWORK_ACTION_LEAVE,
93  NETWORK_ACTION_SERVER_MESSAGE,
94  NETWORK_ACTION_CHAT,
95  NETWORK_ACTION_CHAT_COMPANY,
96  NETWORK_ACTION_CHAT_CLIENT,
97  NETWORK_ACTION_GIVE_MONEY,
98  NETWORK_ACTION_NAME_CHANGE,
99  NETWORK_ACTION_COMPANY_SPECTATOR,
100  NETWORK_ACTION_COMPANY_JOIN,
101  NETWORK_ACTION_COMPANY_NEW,
102  NETWORK_ACTION_KICKED,
103  NETWORK_ACTION_EXTERNAL_CHAT,
104 };
105 
111  NETWORK_ERROR_GENERAL, // Try to use this one like never
112 
113  /* Signals from clients */
114  NETWORK_ERROR_DESYNC,
115  NETWORK_ERROR_SAVEGAME_FAILED,
116  NETWORK_ERROR_CONNECTION_LOST,
117  NETWORK_ERROR_ILLEGAL_PACKET,
118  NETWORK_ERROR_NEWGRF_MISMATCH,
119 
120  /* Signals from servers */
121  NETWORK_ERROR_NOT_AUTHORIZED,
122  NETWORK_ERROR_NOT_EXPECTED,
123  NETWORK_ERROR_WRONG_REVISION,
124  NETWORK_ERROR_NAME_IN_USE,
125  NETWORK_ERROR_WRONG_PASSWORD,
126  NETWORK_ERROR_COMPANY_MISMATCH, // Happens in CLIENT_COMMAND
127  NETWORK_ERROR_KICKED,
128  NETWORK_ERROR_CHEATER,
129  NETWORK_ERROR_FULL,
130  NETWORK_ERROR_TOO_MANY_COMMANDS,
131  NETWORK_ERROR_TIMEOUT_PASSWORD,
132  NETWORK_ERROR_TIMEOUT_COMPUTER,
133  NETWORK_ERROR_TIMEOUT_MAP,
134  NETWORK_ERROR_TIMEOUT_JOIN,
135  NETWORK_ERROR_INVALID_CLIENT_NAME,
136  NETWORK_ERROR_NOT_ON_ALLOW_LIST,
137  NETWORK_ERROR_NO_AUTHENTICATION_METHOD_AVAILABLE,
138 
139  NETWORK_ERROR_END,
140 };
141 
148 class NetworkAuthorizedKeys : public std::vector<std::string> {
149 public:
150  bool Contains(std::string_view key) const;
151  bool Add(std::string_view key);
152  bool Remove(std::string_view key);
153 };
154 
155 #endif /* NETWORK_TYPE_H */
Simple helper to (more easily) manage authorized keys.
Definition: network_type.h:148
bool Contains(std::string_view key) const
Check whether the given key is contains in these authorized keys.
Definition: network.cpp:180
bool Add(std::string_view key)
Add the given key to the authorized keys, when it is not already contained.
Definition: network.cpp:190
bool Remove(std::string_view key)
Remove the given key from the authorized keys, when it is exists.
Definition: network.cpp:206
#define DECLARE_ENUM_AS_ADDABLE(EnumType)
Operator that allows this enumeration to be added to any other enumeration.
Definition: enum_type.hpp:45
static const AdminIndex INVALID_ADMIN_ID
An invalid admin marker.
Definition: network_type.h:64
DestType
Destination of our chat messages.
Definition: network_type.h:79
@ DESTTYPE_CLIENT
Send message/notice to only a certain client (Private)
Definition: network_type.h:82
@ DESTTYPE_TEAM
Send message/notice to everyone playing the same company (Team)
Definition: network_type.h:81
@ DESTTYPE_BROADCAST
Send message/notice to all clients (All)
Definition: network_type.h:80
uint8_t ClientIndex
Indices into the client tables.
Definition: network_type.h:56
uint8_t AdminIndex
Indices into the admin tables.
Definition: network_type.h:59
static const uint MAX_CLIENT_SLOTS
The number of slots; must be at least 1 more than MAX_CLIENTS.
Definition: network_type.h:23
static const uint MAX_CLIENTS
How many clients can we have.
Definition: network_type.h:16
NetworkAction
Actions that can be used for NetworkTextMessage.
Definition: network_type.h:90
NetworkVehicleType
Vehicletypes in the order they are send in info packets.
Definition: network_type.h:28
ClientID
'Unique' identifier to be given to clients
Definition: network_type.h:49
@ INVALID_CLIENT_ID
Client is not part of anything.
Definition: network_type.h:50
@ CLIENT_ID_SERVER
Servers always have this ID.
Definition: network_type.h:51
@ CLIENT_ID_FIRST
The first client ID.
Definition: network_type.h:52
ServerGameType
Game type the server can be using.
Definition: network_type.h:42
NetworkErrorCode
The error codes we send around in the protocols.
Definition: network_type.h:110
static const AdminIndex MAX_ADMINS
Maximum number of allowed admins.
Definition: network_type.h:62
Container for all information known about a client.
Definition: network_base.h:24
Simple calculated statistics of a company.
Definition: network_type.h:67
uint16_t num_vehicle[NETWORK_VEH_END]
How many vehicles are there of this type?
Definition: network_type.h:68
uint16_t num_station[NETWORK_VEH_END]
How many stations are there of this type?
Definition: network_type.h:69
bool ai
Is this company an AI.
Definition: network_type.h:70