summaryrefslogtreecommitdiff
path: root/src/network/core/core.h
diff options
context:
space:
mode:
authorrubidium <rubidium@openttd.org>2007-01-12 20:19:49 +0000
committerrubidium <rubidium@openttd.org>2007-01-12 20:19:49 +0000
commitf66b373b52b2daef69507c402577a1a02b65c40b (patch)
tree23bff1b129004614fd68cb0c30436a14bbe240e9 /src/network/core/core.h
parentee1021d29c6baa6380faf17e270fd5194d2b330c (diff)
downloadopenttd-f66b373b52b2daef69507c402577a1a02b65c40b.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.h52
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 */