src/network/network_data.h
changeset 10792 95b6eb9fcc9e
parent 10791 0f3e94733e65
child 10793 645e32bc09e7
equal deleted inserted replaced
10791:0f3e94733e65 10792:95b6eb9fcc9e
     1 /* $Id$ */
       
     2 
       
     3 /** @file network_data.h Internal functions. */
       
     4 
       
     5 #ifndef NETWORK_DATA_H
       
     6 #define NETWORK_DATA_H
       
     7 
       
     8 #include "../openttd.h"
       
     9 #include "../console_type.h"
       
    10 #include "network.h"
       
    11 #include "network_internal.h"
       
    12 
       
    13 // Is the network enabled?
       
    14 #ifdef ENABLE_NETWORK
       
    15 
       
    16 #include "core/os_abstraction.h"
       
    17 #include "core/core.h"
       
    18 #include "core/config.h"
       
    19 #include "core/packet.h"
       
    20 #include "core/tcp.h"
       
    21 
       
    22 #define MAX_TEXT_MSG_LEN 1024 /* long long long long sentences :-) */
       
    23 
       
    24 // The client-info-server-index is always 1
       
    25 #define NETWORK_SERVER_INDEX 1
       
    26 #define NETWORK_EMPTY_INDEX 0
       
    27 
       
    28 enum MapPacket {
       
    29 	MAP_PACKET_START,
       
    30 	MAP_PACKET_NORMAL,
       
    31 	MAP_PACKET_END,
       
    32 };
       
    33 
       
    34 enum NetworkErrorCode {
       
    35 	NETWORK_ERROR_GENERAL, // Try to use thisone like never
       
    36 
       
    37 	// Signals from clients
       
    38 	NETWORK_ERROR_DESYNC,
       
    39 	NETWORK_ERROR_SAVEGAME_FAILED,
       
    40 	NETWORK_ERROR_CONNECTION_LOST,
       
    41 	NETWORK_ERROR_ILLEGAL_PACKET,
       
    42 	NETWORK_ERROR_NEWGRF_MISMATCH,
       
    43 
       
    44 	// Signals from servers
       
    45 	NETWORK_ERROR_NOT_AUTHORIZED,
       
    46 	NETWORK_ERROR_NOT_EXPECTED,
       
    47 	NETWORK_ERROR_WRONG_REVISION,
       
    48 	NETWORK_ERROR_NAME_IN_USE,
       
    49 	NETWORK_ERROR_WRONG_PASSWORD,
       
    50 	NETWORK_ERROR_PLAYER_MISMATCH, // Happens in CLIENT_COMMAND
       
    51 	NETWORK_ERROR_KICKED,
       
    52 	NETWORK_ERROR_CHEATER,
       
    53 	NETWORK_ERROR_FULL,
       
    54 };
       
    55 
       
    56 // Actions that can be used for NetworkTextMessage
       
    57 enum NetworkAction {
       
    58 	NETWORK_ACTION_JOIN,
       
    59 	NETWORK_ACTION_LEAVE,
       
    60 	NETWORK_ACTION_SERVER_MESSAGE,
       
    61 	NETWORK_ACTION_CHAT,
       
    62 	NETWORK_ACTION_CHAT_COMPANY,
       
    63 	NETWORK_ACTION_CHAT_CLIENT,
       
    64 	NETWORK_ACTION_GIVE_MONEY,
       
    65 	NETWORK_ACTION_NAME_CHANGE,
       
    66 };
       
    67 
       
    68 enum NetworkPasswordType {
       
    69 	NETWORK_GAME_PASSWORD,
       
    70 	NETWORK_COMPANY_PASSWORD,
       
    71 };
       
    72 
       
    73 enum DestType {
       
    74 	DESTTYPE_BROADCAST, ///< Send message/notice to all players (All)
       
    75 	DESTTYPE_TEAM,    ///< Send message/notice to everyone playing the same company (Team)
       
    76 	DESTTYPE_CLIENT,    ///< Send message/notice to only a certain player (Private)
       
    77 };
       
    78 
       
    79 // following externs are instantiated at network.cpp
       
    80 extern CommandPacket *_local_command_queue;
       
    81 
       
    82 // Here we keep track of the clients
       
    83 //  (and the client uses [0] for his own communication)
       
    84 extern NetworkTCPSocketHandler _clients[MAX_CLIENTS];
       
    85 
       
    86 #define DEREF_CLIENT(i) (&_clients[i])
       
    87 // This returns the NetworkClientInfo from a NetworkClientState
       
    88 #define DEREF_CLIENT_INFO(cs) (&_network_client_info[cs - _clients])
       
    89 
       
    90 // Macros to make life a bit more easier
       
    91 #define DEF_CLIENT_RECEIVE_COMMAND(type) NetworkRecvStatus NetworkPacketReceive_ ## type ## _command(Packet *p)
       
    92 #define DEF_CLIENT_SEND_COMMAND(type) void NetworkPacketSend_ ## type ## _command()
       
    93 #define DEF_CLIENT_SEND_COMMAND_PARAM(type) void NetworkPacketSend_ ## type ## _command
       
    94 #define DEF_SERVER_RECEIVE_COMMAND(type) void NetworkPacketReceive_ ## type ## _command(NetworkTCPSocketHandler *cs, Packet *p)
       
    95 #define DEF_SERVER_SEND_COMMAND(type) void NetworkPacketSend_ ## type ## _command(NetworkTCPSocketHandler *cs)
       
    96 #define DEF_SERVER_SEND_COMMAND_PARAM(type) void NetworkPacketSend_ ## type ## _command
       
    97 
       
    98 #define SEND_COMMAND(type) NetworkPacketSend_ ## type ## _command
       
    99 #define RECEIVE_COMMAND(type) NetworkPacketReceive_ ## type ## _command
       
   100 
       
   101 #define FOR_ALL_CLIENTS(cs) for (cs = _clients; cs != endof(_clients) && cs->IsConnected(); cs++)
       
   102 #define FOR_ALL_ACTIVE_CLIENT_INFOS(ci) for (ci = _network_client_info; ci != endof(_network_client_info); ci++) if (ci->client_index != NETWORK_EMPTY_INDEX)
       
   103 
       
   104 void NetworkExecuteCommand(CommandPacket *cp);
       
   105 void NetworkAddCommandQueue(NetworkTCPSocketHandler *cs, CommandPacket *cp);
       
   106 
       
   107 // from network.c
       
   108 void NetworkCloseClient(NetworkTCPSocketHandler *cs);
       
   109 void CDECL NetworkTextMessage(NetworkAction action, ConsoleColour color, bool self_send, const char *name, const char *str, ...);
       
   110 void NetworkGetClientName(char *clientname, size_t size, const NetworkTCPSocketHandler *cs);
       
   111 uint NetworkCalculateLag(const NetworkTCPSocketHandler *cs);
       
   112 byte NetworkGetCurrentLanguageIndex();
       
   113 NetworkClientInfo *NetworkFindClientInfoFromIndex(uint16 client_index);
       
   114 NetworkClientInfo *NetworkFindClientInfoFromIP(const char *ip);
       
   115 NetworkTCPSocketHandler *NetworkFindClientStateFromIndex(uint16 client_index);
       
   116 unsigned long NetworkResolveHost(const char *hostname);
       
   117 char* GetNetworkErrorMsg(char* buf, NetworkErrorCode err, const char* last);
       
   118 
       
   119 #endif /* ENABLE_NETWORK */
       
   120 
       
   121 #endif /* NETWORK_DATA_H */