summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/network/core/tcp.h14
-rw-r--r--src/network/network_internal.h8
2 files changed, 14 insertions, 8 deletions
diff --git a/src/network/core/tcp.h b/src/network/core/tcp.h
index f720e0de0..aa5bb7c4a 100644
--- a/src/network/core/tcp.h
+++ b/src/network/core/tcp.h
@@ -111,6 +111,7 @@ public:
Packet *Recv_Packet(NetworkRecvStatus *status);
+ inline bool IsValid() const { return this->IsConnected(); }
inline NetworkClientInfo *GetInfo() const
{
extern NetworkClientSocket _clients[MAX_CLIENTS];
@@ -118,6 +119,19 @@ public:
}
};
+// Here we keep track of the clients
+// (and the client uses [0] for his own communication)
+extern NetworkClientSocket _clients[MAX_CLIENTS];
+#define GetNetworkClientSocket(i) (&_clients[i])
+
+static inline bool IsValidNetworkClientSocketIndex(ClientIndex index)
+{
+ return (uint)index < MAX_CLIENTS && GetNetworkClientSocket(index)->IsValid();
+}
+
+#define FOR_ALL_CLIENT_SOCKETS_FROM(d, start) for (d = GetNetworkClientSocket(start); d != GetNetworkClientSocket(MAX_CLIENTS); d++) if (d->IsValid())
+#define FOR_ALL_CLIENT_SOCKETS(d) FOR_ALL_CLIENT_SOCKETS_FROM(d, 0)
+
#endif /* ENABLE_NETWORK */
#endif /* NETWORK_CORE_TCP_H */
diff --git a/src/network/network_internal.h b/src/network/network_internal.h
index 3f247fb2e..1434e47e0 100644
--- a/src/network/network_internal.h
+++ b/src/network/network_internal.h
@@ -122,10 +122,6 @@ extern uint8 _network_advertise_retries;
// following externs are instantiated at network.cpp
extern CommandPacket *_local_command_queue;
-// Here we keep track of the clients
-// (and the client uses [0] for his own communication)
-extern NetworkClientSocket _clients[MAX_CLIENTS];
-
void NetworkTCPQueryServer(const char* host, unsigned short port);
void NetworkAddServer(const char *b);
@@ -147,8 +143,6 @@ NetworkClientSocket *NetworkFindClientStateFromClientID(ClientID client_id);
char* GetNetworkErrorMsg(char* buf, NetworkErrorCode err, const char* last);
bool NetworkFindName(char new_name[NETWORK_CLIENT_NAME_LENGTH]);
-#define GetNetworkClientSocket(i) (&_clients[i])
-
// Macros to make life a bit more easier
#define DEF_CLIENT_RECEIVE_COMMAND(type) NetworkRecvStatus NetworkPacketReceive_ ## type ## _command(Packet *p)
#define DEF_CLIENT_SEND_COMMAND(type) void NetworkPacketSend_ ## type ## _command()
@@ -160,7 +154,5 @@ bool NetworkFindName(char new_name[NETWORK_CLIENT_NAME_LENGTH]);
#define SEND_COMMAND(type) NetworkPacketSend_ ## type ## _command
#define RECEIVE_COMMAND(type) NetworkPacketReceive_ ## type ## _command
-#define FOR_ALL_CLIENT_SOCKETS(cs) for (cs = _clients; cs != endof(_clients) && cs->IsConnected(); cs++)
-
#endif /* ENABLE_NETWORK */
#endif /* NETWORK_INTERNAL_H */