Files
@ r15577:a61e44bed2f3
Branch filter:
Location: cpp/openttd-patchpack/source/src/network/core/tcp_game.h - annotation
r15577:a61e44bed2f3
4.5 KiB
text/x-c
(svn r20247) -Fix: when it is known the loading an old savegame is going to fail, bail out immediately (using an exception) instead of going on until e.g. the expected number of byte is read
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 | r10746:38677d5ad005 r10746:38677d5ad005 r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r10746:38677d5ad005 r10746:38677d5ad005 r10746:38677d5ad005 r10746:38677d5ad005 r10746:38677d5ad005 r10746:38677d5ad005 r10746:38677d5ad005 r10746:38677d5ad005 r10746:38677d5ad005 r14248:a9050881acd7 r11969:3526c3cc75dc r10746:38677d5ad005 r13182:d311a9b54477 r13182:d311a9b54477 r10746:38677d5ad005 r10746:38677d5ad005 r10746:38677d5ad005 r10746:38677d5ad005 r10746:38677d5ad005 r10746:38677d5ad005 r15170:0ae147d53900 r10746:38677d5ad005 r10746:38677d5ad005 r10746:38677d5ad005 r10746:38677d5ad005 r10746:38677d5ad005 r10746:38677d5ad005 r10746:38677d5ad005 r14985:6c2d89816318 r14985:6c2d89816318 r14985:6c2d89816318 r14985:6c2d89816318 r10746:38677d5ad005 r10746:38677d5ad005 r10746:38677d5ad005 r10746:38677d5ad005 r10746:38677d5ad005 r10746:38677d5ad005 r10746:38677d5ad005 r10746:38677d5ad005 r10746:38677d5ad005 r10746:38677d5ad005 r10746:38677d5ad005 r10746:38677d5ad005 r10746:38677d5ad005 r10746:38677d5ad005 r10746:38677d5ad005 r10746:38677d5ad005 r10746:38677d5ad005 r10746:38677d5ad005 r10746:38677d5ad005 r10746:38677d5ad005 r10746:38677d5ad005 r10746:38677d5ad005 r10746:38677d5ad005 r10746:38677d5ad005 r10746:38677d5ad005 r10907:3616576a3216 r10907:3616576a3216 r10907:3616576a3216 r10907:3616576a3216 r10746:38677d5ad005 r10746:38677d5ad005 r10746:38677d5ad005 r10746:38677d5ad005 r10746:38677d5ad005 r10746:38677d5ad005 r10746:38677d5ad005 r10746:38677d5ad005 r14988:e84b1f39bc47 r15057:2e0175fbf90e r14988:e84b1f39bc47 r14985:6c2d89816318 r14988:e84b1f39bc47 r14988:e84b1f39bc47 r14988:e84b1f39bc47 r14988:e84b1f39bc47 r14988:e84b1f39bc47 r14988:e84b1f39bc47 r15046:72123251c325 r10746:38677d5ad005 r10746:38677d5ad005 r10746:38677d5ad005 r11967:df0600d2c7e7 r11967:df0600d2c7e7 r10746:38677d5ad005 r10746:38677d5ad005 r11967:df0600d2c7e7 r10746:38677d5ad005 r10746:38677d5ad005 r10746:38677d5ad005 r10746:38677d5ad005 r10746:38677d5ad005 r10746:38677d5ad005 r10746:38677d5ad005 r10746:38677d5ad005 r10746:38677d5ad005 r10746:38677d5ad005 r10746:38677d5ad005 r10746:38677d5ad005 r10746:38677d5ad005 r12178:34138fe98654 r10746:38677d5ad005 r10746:38677d5ad005 r10746:38677d5ad005 r10746:38677d5ad005 r10746:38677d5ad005 r10746:38677d5ad005 r10746:38677d5ad005 r10746:38677d5ad005 r10746:38677d5ad005 r10746:38677d5ad005 r10746:38677d5ad005 r11966:921bea0ca112 r11966:921bea0ca112 r10746:38677d5ad005 r10746:38677d5ad005 r10746:38677d5ad005 r10746:38677d5ad005 | /* $Id$ */
/*
* 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 tcp_game.h Basic functions to receive and send TCP packets for game purposes.
*/
#ifndef NETWORK_CORE_TCP_GAME_H
#define NETWORK_CORE_TCP_GAME_H
#include "os_abstraction.h"
#include "tcp.h"
#include "../network_type.h"
#include "../../core/pool_type.hpp"
#ifdef ENABLE_NETWORK
/**
* Enum with all types of UDP packets.
* The order of the first 4 packets MUST not be changed, as
* it protects old clients from joining newer servers
* (because SERVER_ERROR is the respond to a wrong revision)
*/
enum TCPPacketType {
PACKET_SERVER_FULL,
PACKET_SERVER_BANNED,
PACKET_CLIENT_JOIN,
PACKET_SERVER_ERROR,
PACKET_CLIENT_COMPANY_INFO,
PACKET_SERVER_COMPANY_INFO,
PACKET_SERVER_CLIENT_INFO,
PACKET_SERVER_NEED_GAME_PASSWORD,
PACKET_SERVER_NEED_COMPANY_PASSWORD,
PACKET_CLIENT_GAME_PASSWORD,
PACKET_CLIENT_COMPANY_PASSWORD,
PACKET_SERVER_WELCOME,
PACKET_CLIENT_GETMAP,
PACKET_SERVER_WAIT,
PACKET_SERVER_MAP,
PACKET_CLIENT_MAP_OK,
PACKET_SERVER_JOIN,
PACKET_SERVER_FRAME,
PACKET_SERVER_SYNC,
PACKET_CLIENT_ACK,
PACKET_CLIENT_COMMAND,
PACKET_SERVER_COMMAND,
PACKET_CLIENT_CHAT,
PACKET_SERVER_CHAT,
PACKET_CLIENT_SET_PASSWORD,
PACKET_CLIENT_SET_NAME,
PACKET_CLIENT_QUIT,
PACKET_CLIENT_ERROR,
PACKET_SERVER_QUIT,
PACKET_SERVER_ERROR_QUIT,
PACKET_SERVER_SHUTDOWN,
PACKET_SERVER_NEWGAME,
PACKET_SERVER_RCON,
PACKET_CLIENT_RCON,
PACKET_SERVER_CHECK_NEWGRFS,
PACKET_CLIENT_NEWGRFS_CHECKED,
PACKET_SERVER_MOVE,
PACKET_CLIENT_MOVE,
PACKET_SERVER_COMPANY_UPDATE,
PACKET_SERVER_CONFIG_UPDATE,
PACKET_END ///< Must ALWAYS be on the end of this list!! (period)
};
/** Packet that wraps a command */
struct CommandPacket;
/** Status of a client */
enum ClientStatus {
STATUS_INACTIVE, ///< The client is not connected nor active
STATUS_NEWGRFS_CHECK, ///< The client is checking NewGRFs
STATUS_AUTH_GAME, ///< The client is authorizing with game (server) password
STATUS_AUTH_COMPANY, ///< The client is authorizing with company password
STATUS_AUTHORIZED, ///< The client is authorized
STATUS_MAP_WAIT, ///< The client is waiting as someone else is downloading the map
STATUS_MAP, ///< The client is downloading the map
STATUS_DONE_MAP, ///< The client has downloaded the map
STATUS_PRE_ACTIVE, ///< The client is catching up the delayed frames
STATUS_ACTIVE, ///< The client is active within in the game
STATUS_END ///< Must ALWAYS be on the end of this list!! (period)
};
class NetworkClientSocket;
typedef Pool<NetworkClientSocket, ClientIndex, 8, MAX_CLIENT_SLOTS> NetworkClientSocketPool;
extern NetworkClientSocketPool _networkclientsocket_pool;
/** Base socket handler for all TCP sockets */
class NetworkClientSocket : public NetworkClientSocketPool::PoolItem<&_networkclientsocket_pool>, public NetworkTCPSocketHandler {
/* TODO: rewrite into a proper class */
private:
NetworkClientInfo *info; ///< Client info related to this socket
public:
ClientID client_id; ///< Client identifier
uint32 last_frame; ///< Last frame we have executed
uint32 last_frame_server; ///< Last frame the server has executed
byte lag_test; ///< Byte used for lag-testing the client
ClientStatus status; ///< Status of this client
CommandPacket *command_queue; ///< The command-queue awaiting delivery
NetworkRecvStatus CloseConnection(bool error = true);
NetworkClientSocket(ClientID client_id = INVALID_CLIENT_ID);
~NetworkClientSocket();
inline void SetInfo(NetworkClientInfo *info) { assert(info != NULL && this->info == NULL); this->info = info; }
inline NetworkClientInfo *GetInfo() const { return this->info; }
const char *Recv_Command(Packet *p, CommandPacket *cp);
void Send_Command(Packet *p, const CommandPacket *cp);
};
#define FOR_ALL_CLIENT_SOCKETS_FROM(var, start) FOR_ALL_ITEMS_FROM(NetworkClientSocket, clientsocket_index, var, start)
#define FOR_ALL_CLIENT_SOCKETS(var) FOR_ALL_CLIENT_SOCKETS_FROM(var, 0)
#endif /* ENABLE_NETWORK */
#endif /* NETWORK_CORE_TCP_GAME_H */
|