File diff r25816:b9a33e4cab9f → r25817:3f5c3838fe0a
src/network/network_type.h
Show inline comments
 
/*
 
 * 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)