Files @ r19086:cf77bf636a75
Branch filter:

Location: cpp/openttd-patchpack/source/src/network/core/core.h - annotation

michi_cc
(svn r23954) -Fix (r23952): Update required grfcodec version.
r5523:6df59e296f14
r5523:6df59e296f14
r12768:980ae0491352
r12768:980ae0491352
r12768:980ae0491352
r12768:980ae0491352
r12768:980ae0491352
r12768:980ae0491352
r12768:980ae0491352
r6121:a8ff6abe7fb2
r6121:a8ff6abe7fb2
r6121:a8ff6abe7fb2
r6121:a8ff6abe7fb2
r16851:b5784600e35e
r16851:b5784600e35e
r5523:6df59e296f14
r5870:306906f08b8e
r16677:a4fdf17e43e3
r5624:8f8d1f8d3a74
r13182:d311a9b54477
r13182:d311a9b54477
r6247:96e840dbefcc
r6247:96e840dbefcc
r5523:6df59e296f14
r5864:7aec8f5a81f1
r6248:b940b09d7ab8
r5624:8f8d1f8d3a74
r5624:8f8d1f8d3a74
r5872:512ff87e68bf
r5624:8f8d1f8d3a74
r5624:8f8d1f8d3a74
r5624:8f8d1f8d3a74
r5624:8f8d1f8d3a74
r5624:8f8d1f8d3a74
r5624:8f8d1f8d3a74
r5624:8f8d1f8d3a74
r6248:b940b09d7ab8
r5624:8f8d1f8d3a74
r5870:306906f08b8e
r5881:a910d470cf80
r5870:306906f08b8e
r5624:8f8d1f8d3a74
r5624:8f8d1f8d3a74
r5624:8f8d1f8d3a74
r5624:8f8d1f8d3a74
r11589:553d24b1005c
r5624:8f8d1f8d3a74
r5864:7aec8f5a81f1
r11593:8dd431018ab1
r5864:7aec8f5a81f1
r5864:7aec8f5a81f1
r5624:8f8d1f8d3a74
r5624:8f8d1f8d3a74
r5624:8f8d1f8d3a74
r5624:8f8d1f8d3a74
r5624:8f8d1f8d3a74
r5624:8f8d1f8d3a74
r5624:8f8d1f8d3a74
r5624:8f8d1f8d3a74
r12178:34138fe98654
r5624:8f8d1f8d3a74
r5624:8f8d1f8d3a74
r12178:34138fe98654
r5624:8f8d1f8d3a74
r5624:8f8d1f8d3a74
r5624:8f8d1f8d3a74
r5624:8f8d1f8d3a74
r5624:8f8d1f8d3a74
r5624:8f8d1f8d3a74
r5624:8f8d1f8d3a74
r9428:6800206a6c0d
r5870:306906f08b8e
r11589:553d24b1005c
r11589:553d24b1005c
r11589:553d24b1005c
r11589:553d24b1005c
r11589:553d24b1005c
r16618:d89f0c3f42e7
r16618:d89f0c3f42e7
r16664:0a9a4431500f
r5624:8f8d1f8d3a74
r5624:8f8d1f8d3a74
r5523:6df59e296f14
r5523:6df59e296f14
r16851:b5784600e35e
/* $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 core.h Base for all network types (UDP and TCP)
 */

#ifndef NETWORK_CORE_CORE_H
#define NETWORK_CORE_CORE_H

#include "../../newgrf_config.h"
#include "config.h"

#ifdef ENABLE_NETWORK

bool NetworkCoreInitialize();
void NetworkCoreShutdown();

/** Status of a network client; reasons why a client has quit */
enum NetworkRecvStatus {
	NETWORK_RECV_STATUS_OKAY,             ///< Everything is okay
	NETWORK_RECV_STATUS_DESYNC,           ///< A desync did occur
	NETWORK_RECV_STATUS_NEWGRF_MISMATCH,  ///< We did not have the required NewGRFs
	NETWORK_RECV_STATUS_SAVEGAME,         ///< Something went wrong (down)loading the savegame
	NETWORK_RECV_STATUS_CONN_LOST,        ///< The conection is 'just' lost
	NETWORK_RECV_STATUS_MALFORMED_PACKET, ///< We apparently send a malformed packet
	NETWORK_RECV_STATUS_SERVER_ERROR,     ///< The server told us we made an error
	NETWORK_RECV_STATUS_SERVER_FULL,      ///< The server is full
	NETWORK_RECV_STATUS_SERVER_BANNED,    ///< The server has banned us
	NETWORK_RECV_STATUS_CLOSE_QUERY,      ///< Done quering the server
};

/** Forward declaration due to circular dependencies */
struct Packet;

/**
 * SocketHandler for all network sockets in OpenTTD.
 */
class NetworkSocketHandler {
	bool has_quit; ///< Whether the current client has quit/send a bad packet
public:
	/** Create a new unbound socket */
	NetworkSocketHandler() { this->has_quit = false; }

	/** Close the socket when distructing the socket handler */
	virtual ~NetworkSocketHandler() { this->Close(); }

	/** Really close the socket */
	virtual void Close() {}

	/**
	 * Close the current connection; for TCP this will be mostly equivalent
	 * to Close(), but for UDP it just means the packet has to be dropped.
	 * @param error Whether we quit under an error condition or not.
	 * @return new status of the connection.
	 */
	virtual NetworkRecvStatus CloseConnection(bool error = true) { this->has_quit = true; return NETWORK_RECV_STATUS_OKAY; }

	/**
	 * Whether the current client connected to the socket has quit.
	 * In the case of UDP, for example, once a client quits (send bad
	 * data), the socket in not closed; only the packet is dropped.
	 * @return true when the current client has quit, false otherwise
	 */
	bool HasClientQuit() const { return this->has_quit; }

	/**
	 * Reopen the socket so we can send/receive stuff again.
	 */
	void Reopen() { this->has_quit = false; }

	void SendGRFIdentifier(Packet *p, const GRFIdentifier *grf);
	void ReceiveGRFIdentifier(Packet *p, GRFIdentifier *grf);
	void SendCompanyInformation(Packet *p, const struct Company *c, const struct NetworkCompanyStats *stats, uint max_len = NETWORK_COMPANY_NAME_LENGTH);
};

#endif /* ENABLE_NETWORK */

#endif /* NETWORK_CORE_CORE_H */