mirror of https://github.com/OpenTTD/OpenTTD.git
77 lines
3.0 KiB
C++
77 lines
3.0 KiB
C++
/*
|
|
* 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"
|
|
|
|
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_CLIENT_QUIT, ///< The connection is lost gracefully. Other clients are already informed of this leaving client.
|
|
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 querying the server.
|
|
NETWORK_RECV_STATUS_CONNECTION_LOST, ///< The connection is lost unexpectedly.
|
|
};
|
|
|
|
/** Forward declaration due to circular dependencies */
|
|
struct Packet;
|
|
|
|
/**
|
|
* SocketHandler for all network sockets in OpenTTD.
|
|
*/
|
|
class NetworkSocketHandler {
|
|
private:
|
|
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 destructing the socket handler */
|
|
virtual ~NetworkSocketHandler() = default;
|
|
|
|
/**
|
|
* Mark the connection as closed.
|
|
*
|
|
* This doesn't mean the actual connection is closed, but just that we
|
|
* act like it is. This is useful for UDP, which doesn't normally close
|
|
* a socket, but its handler might need to pretend it does.
|
|
*/
|
|
void MarkClosed() { this->has_quit = true; }
|
|
|
|
/**
|
|
* 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; }
|
|
};
|
|
|
|
#endif /* NETWORK_CORE_CORE_H */
|