|
|
/*
|
|
|
* This file is part of OpenTTD.
|
|
|
* 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.
|
|
|
* 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.
|
|
|
* 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/>.
|
|
|
*/
|
|
|
|
|
|
/** @file network_type.h Types used for networking. */
|
|
|
|
|
|
#ifndef NETWORK_TYPE_H
|
|
|
#define NETWORK_TYPE_H
|
|
|
|
|
|
#include "core/config.h"
|
|
|
|
|
|
/** How many clients can we have */
|
|
|
static const uint MAX_CLIENTS = 255;
|
|
|
|
|
|
/**
|
|
|
* The number of slots; must be at least 1 more than MAX_CLIENTS. It must
|
|
|
* furthermore be less than or equal to 256 as client indices (sent over
|
|
|
* the network) are 8 bits. It needs 1 more for the dedicated server.
|
|
|
*/
|
|
|
static const uint MAX_CLIENT_SLOTS = 256;
|
|
|
|
|
|
/**
|
|
|
* Vehicletypes in the order they are send in info packets.
|
|
|
*/
|
|
|
enum NetworkVehicleType {
|
|
|
NETWORK_VEH_TRAIN = 0,
|
|
|
NETWORK_VEH_LORRY,
|
|
|
NETWORK_VEH_BUS,
|
|
|
NETWORK_VEH_PLANE,
|
|
|
NETWORK_VEH_SHIP,
|
|
|
|
|
|
NETWORK_VEH_END
|
|
|
};
|
|
|
|
|
|
/**
|
|
|
* Game type the server can be using.
|
|
|
* Used on the network protocol to communicate with Game Coordinator.
|
|
|
*/
|
|
|
enum ServerGameType : uint8 {
|
|
|
SERVER_GAME_TYPE_LOCAL = 0,
|
|
|
SERVER_GAME_TYPE_PUBLIC,
|
|
|
SERVER_GAME_TYPE_INVITE_ONLY,
|
|
|
};
|
|
|
|
|
|
/** 'Unique' identifier to be given to clients */
|
|
|
enum ClientID : uint32 {
|
|
|
INVALID_CLIENT_ID = 0, ///< Client is not part of anything
|
|
|
CLIENT_ID_SERVER = 1, ///< Servers always have this ID
|
|
|
CLIENT_ID_FIRST = 2, ///< The first client ID
|
|
|
};
|
|
|
|
|
|
/** Indices into the client tables */
|
|
|
typedef uint8 ClientIndex;
|
|
|
|
|
|
/** Indices into the admin tables. */
|
|
|
typedef uint8 AdminIndex;
|
|
|
|
|
|
/** Maximum number of allowed admins. */
|
|
|
static const AdminIndex MAX_ADMINS = 16;
|
|
|
/** An invalid admin marker. */
|
|
|
static const AdminIndex INVALID_ADMIN_ID = UINT8_MAX;
|
|
|
|
|
|
/** Simple calculated statistics of a company */
|
|
|
struct NetworkCompanyStats {
|
|
|
uint16 num_vehicle[NETWORK_VEH_END]; ///< How many vehicles are there of this type?
|
|
|
uint16 num_station[NETWORK_VEH_END]; ///< How many stations are there of this type?
|
|
|
bool ai; ///< Is this company an AI
|
|
|
};
|
|
|
|
|
|
/** Some state information of a company, especially for servers */
|
|
|
struct NetworkCompanyState {
|
|
|
std::string password; ///< The password for the company
|
|
|
uint16 months_empty; ///< How many months the company is empty
|
|
|
};
|
|
|
|
|
|
struct NetworkClientInfo;
|
|
|
|
|
|
/** The type of password we're asking for. */
|
|
|
enum NetworkPasswordType {
|
|
|
NETWORK_GAME_PASSWORD, ///< The password of the game.
|
|
|
NETWORK_COMPANY_PASSWORD, ///< The password of the company.
|
|
|
};
|
|
|
|
|
|
/**
|
|
|
* Destination of our chat messages.
|
|
|
* @warning The values of the enum items are part of the admin network API. Only append at the end.
|
|
|
*/
|
|
|
enum DestType {
|
|
|
DESTTYPE_BROADCAST, ///< Send message/notice to all clients (All)
|
|
|
DESTTYPE_TEAM, ///< Send message/notice to everyone playing the same company (Team)
|