diff options
author | rubidium <rubidium@openttd.org> | 2007-01-12 20:19:49 +0000 |
---|---|---|
committer | rubidium <rubidium@openttd.org> | 2007-01-12 20:19:49 +0000 |
commit | 98e462e56444155a11fe92b9391c2faf1aea90d2 (patch) | |
tree | 23bff1b129004614fd68cb0c30436a14bbe240e9 /src/network/core/core.h | |
parent | 473ed1d351e04b8f000325219bf80f54bd96b7f1 (diff) | |
download | openttd-98e462e56444155a11fe92b9391c2faf1aea90d2.tar.xz |
(svn r8083) -Codechange: make a NetworkSocketHandler as base for all sockets and move a little of NetworkClientState functionality to the NetworkSocketHandler. Move the rest of the NetworkClientState to the new NetworkTCPSocketHandler class/struct, which is not yet implemented in an object oriented manner. The UDP socket handler now extends the NetworkSocketHandler instead of having a reference to a NetworkClientState.
Diffstat (limited to 'src/network/core/core.h')
-rw-r--r-- | src/network/core/core.h | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/src/network/core/core.h b/src/network/core/core.h index c6dc05591..f88fd0116 100644 --- a/src/network/core/core.h +++ b/src/network/core/core.h @@ -5,9 +5,61 @@ #ifdef ENABLE_NETWORK +#include "os_abstraction.h" + bool NetworkCoreInitialize(void); void NetworkCoreShutdown(void); +typedef enum { + NETWORK_RECV_STATUS_OKAY, ///< Everything is okay + NETWORK_RECV_STATUS_DESYNC, ///< A desync did occur + 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 +} NetworkRecvStatus; + +/** + * SocketHandler for all network sockets in OpenTTD. + */ +class NetworkSocketHandler { +public: + /* TODO: make socket & has_quit protected once the TCP stuff + *is in a real class too */ + bool has_quit; ///< Whether the current client has quit/send a bad packet + SOCKET sock; ///< The socket currently connected to +public: + NetworkSocketHandler() { this->sock = INVALID_SOCKET; this->has_quit = false; } + 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. + * @return new status of the connection. + */ + virtual NetworkRecvStatus CloseConnection() { this->has_quit = true; return NETWORK_RECV_STATUS_OKAY; } + + /** + * Whether this socket is currently bound to a socket. + * @return true when the socket is bound, false otherwise + */ + bool IsConnected() { return this->sock != INVALID_SOCKET; } + + /** + * 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() { return this->has_quit; } +}; + #endif /* ENABLE_NETWORK */ #endif /* NETWORK_CORE_H */ |