diff options
Diffstat (limited to 'src/network')
-rw-r--r-- | src/network/core/tcp.h | 7 | ||||
-rw-r--r-- | src/network/network.cpp | 21 | ||||
-rw-r--r-- | src/network/network_client.cpp | 6 | ||||
-rw-r--r-- | src/network/network_func.h | 2 | ||||
-rw-r--r-- | src/network/network_gui.cpp | 6 | ||||
-rw-r--r-- | src/network/network_internal.h | 2 | ||||
-rw-r--r-- | src/network/network_server.cpp | 42 |
7 files changed, 41 insertions, 45 deletions
diff --git a/src/network/core/tcp.h b/src/network/core/tcp.h index 1bafbf26e..f956aa105 100644 --- a/src/network/core/tcp.h +++ b/src/network/core/tcp.h @@ -110,6 +110,13 @@ public: bool IsPacketQueueEmpty(); Packet *Recv_Packet(NetworkRecvStatus *status); + + inline NetworkClientInfo *GetInfo() const + { + extern NetworkClientInfo _network_client_info[MAX_CLIENT_INFO]; + extern NetworkTCPSocketHandler _clients[MAX_CLIENTS]; + return &_network_client_info[this - _clients]; + } }; #endif /* ENABLE_NETWORK */ diff --git a/src/network/network.cpp b/src/network/network.cpp index 2983446fc..0b0bfb98e 100644 --- a/src/network/network.cpp +++ b/src/network/network.cpp @@ -163,9 +163,9 @@ NetworkTCPSocketHandler *NetworkFindClientStateFromClientID(ClientID client_id) // if the user did not send it yet, Client #<no> is used. void NetworkGetClientName(char *client_name, size_t size, const NetworkTCPSocketHandler *cs) { - const NetworkClientInfo *ci = DEREF_CLIENT_INFO(cs); + const NetworkClientInfo *ci = cs->GetInfo(); - if (ci->client_name[0] == '\0') { + if (StrEmpty(ci->client_name)) { snprintf(client_name, size, "Client #%4d", cs->client_id); } else { ttd_strlcpy(client_name, ci->client_name, size); @@ -174,11 +174,11 @@ void NetworkGetClientName(char *client_name, size_t size, const NetworkTCPSocket byte NetworkSpectatorCount() { - NetworkTCPSocketHandler *cs; + const NetworkClientInfo *ci; byte count = 0; - FOR_ALL_CLIENTS(cs) { - if (DEREF_CLIENT_INFO(cs)->client_playas == COMPANY_SPECTATOR) count++; + FOR_ALL_CLIENT_INFOS(ci) { + if (ci->client_playas == COMPANY_SPECTATOR) count++; } return count; @@ -360,11 +360,10 @@ char* GetNetworkErrorMsg(char* buf, NetworkErrorCode err, const char* last) /* Count the number of active clients connected */ static uint NetworkCountActiveClients() { - NetworkTCPSocketHandler *cs; + const NetworkClientInfo *ci; uint count = 0; - FOR_ALL_CLIENTS(cs) { - const NetworkClientInfo *ci = DEREF_CLIENT_INFO(cs); + FOR_ALL_CLIENT_INFOS(ci) { if (IsValidCompanyID(ci->client_playas)) count++; } @@ -439,7 +438,7 @@ static NetworkTCPSocketHandler *NetworkAllocClient(SOCKET s) cs->last_frame_server = _frame_counter; if (_network_server) { - NetworkClientInfo *ci = DEREF_CLIENT_INFO(cs); + NetworkClientInfo *ci = cs->GetInfo(); memset(ci, 0, sizeof(*ci)); cs->client_id = _network_client_id++; @@ -495,7 +494,7 @@ void NetworkCloseClient(NetworkTCPSocketHandler *cs) cs->Destroy(); // Close the gap in the client-list - ci = DEREF_CLIENT_INFO(cs); + ci = cs->GetInfo(); if (_network_server) { // We just lost one client :( @@ -617,7 +616,7 @@ static void NetworkAcceptClients() // the client stays inactive cs->status = STATUS_INACTIVE; - DEREF_CLIENT_INFO(cs)->client_ip = sin.sin_addr.s_addr; // Save the IP of the client + cs->GetInfo()->client_ip = sin.sin_addr.s_addr; // Save the IP of the client } } diff --git a/src/network/network_client.cpp b/src/network/network_client.cpp index 987614ca7..d6cd1af43 100644 --- a/src/network/network_client.cpp +++ b/src/network/network_client.cpp @@ -967,7 +967,7 @@ bool NetworkClientPreferTeamChat(const NetworkClientInfo *cio) if (!_settings_client.gui.prefer_teamchat || !IsValidCompanyID(cio->client_playas)) return false; const NetworkClientInfo *ci; - FOR_ALL_ACTIVE_CLIENT_INFOS(ci) { + FOR_ALL_CLIENT_INFOS(ci) { if (ci->client_playas == cio->client_playas && ci != cio) return true; } @@ -979,8 +979,8 @@ bool NetworkClientPreferTeamChat(const NetworkClientInfo *cio) */ void NetworkPrintClients() { - NetworkClientInfo *ci; - FOR_ALL_ACTIVE_CLIENT_INFOS(ci) { + const NetworkClientInfo *ci; + FOR_ALL_CLIENT_INFOS(ci) { IConsolePrintF(CC_INFO, "Client #%1d name: '%s' company: %1d IP: %s", ci->client_id, ci->client_name, diff --git a/src/network/network_func.h b/src/network/network_func.h index ebc5c9da2..e05d0f952 100644 --- a/src/network/network_func.h +++ b/src/network/network_func.h @@ -64,7 +64,7 @@ void CDECL NetworkAddChatMessage(uint16 color, uint8 duration, const char *messa void NetworkUndrawChatMessage(); void NetworkChatMessageDailyLoop(); -#define FOR_ALL_ACTIVE_CLIENT_INFOS(ci) for (ci = _network_client_info; ci != endof(_network_client_info); ci++) if (ci->client_id != INVALID_CLIENT_ID) +#define FOR_ALL_CLIENT_INFOS(ci) for (ci = _network_client_info; ci != endof(_network_client_info); ci++) if (ci->client_id != INVALID_CLIENT_ID) #endif /* ENABLE_NETWORK */ #endif /* NETWORK_FUNC_H */ diff --git a/src/network/network_gui.cpp b/src/network/network_gui.cpp index f9d972c6b..d3f7a4ca5 100644 --- a/src/network/network_gui.cpp +++ b/src/network/network_gui.cpp @@ -1419,7 +1419,7 @@ static const NetworkClientInfo *NetworkFindClientInfo(byte client_no) { const NetworkClientInfo *ci; - FOR_ALL_ACTIVE_CLIENT_INFOS(ci) { + FOR_ALL_CLIENT_INFOS(ci) { if (client_no == 0) return ci; client_no--; } @@ -1659,7 +1659,7 @@ struct NetworkClientListWindow : Window const NetworkClientInfo *ci; /* Should be replaced with a loop through all clients */ - FOR_ALL_ACTIVE_CLIENT_INFOS(ci) { + FOR_ALL_CLIENT_INFOS(ci) { num++; } @@ -1689,7 +1689,7 @@ struct NetworkClientListWindow : Window int y = CLNWND_OFFSET; - FOR_ALL_ACTIVE_CLIENT_INFOS(ci) { + FOR_ALL_CLIENT_INFOS(ci) { TextColour colour; if (this->selected_item == i++) { // Selected item, highlight it GfxFillRect(1, y, 248, y + CLNWND_ROWSIZE - 1, 0); diff --git a/src/network/network_internal.h b/src/network/network_internal.h index 4e970f58d..f19d6306e 100644 --- a/src/network/network_internal.h +++ b/src/network/network_internal.h @@ -149,8 +149,6 @@ char* GetNetworkErrorMsg(char* buf, NetworkErrorCode err, const char* last); bool NetworkFindName(char new_name[NETWORK_CLIENT_NAME_LENGTH]); #define DEREF_CLIENT(i) (&_clients[i]) -// This returns the NetworkClientInfo from a NetworkClientState -#define DEREF_CLIENT_INFO(cs) (&_network_client_info[cs - _clients]) // Macros to make life a bit more easier #define DEF_CLIENT_RECEIVE_COMMAND(type) NetworkRecvStatus NetworkPacketReceive_ ## type ## _command(Packet *p) diff --git a/src/network/network_server.cpp b/src/network/network_server.cpp index d0f098e1e..0bf9f3a74 100644 --- a/src/network/network_server.cpp +++ b/src/network/network_server.cpp @@ -89,7 +89,7 @@ DEF_SERVER_SEND_COMMAND(PACKET_SERVER_COMPANY_INFO) NetworkGetClientName(client_name, sizeof(client_name), csi); - ci = DEREF_CLIENT_INFO(csi); + ci = csi->GetInfo(); if (ci != NULL && IsValidCompanyID(ci->client_playas)) { if (!StrEmpty(clients[ci->client_playas])) { strecat(clients[ci->client_playas], ", ", lastof(clients[ci->client_playas])); @@ -255,7 +255,7 @@ DEF_SERVER_SEND_COMMAND(PACKET_SERVER_WELCOME) // Transmit info about all the active clients FOR_ALL_CLIENTS(new_cs) { if (new_cs != cs && new_cs->status > STATUS_AUTH) - SEND_COMMAND(PACKET_SERVER_CLIENT_INFO)(cs, DEREF_CLIENT_INFO(new_cs)); + SEND_COMMAND(PACKET_SERVER_CLIENT_INFO)(cs, new_cs->GetInfo()); } // Also send the info of the server SEND_COMMAND(PACKET_SERVER_CLIENT_INFO)(cs, NetworkFindClientInfoFromClientID(CLIENT_ID_SERVER)); @@ -609,7 +609,7 @@ DEF_SERVER_RECEIVE_COMMAND(PACKET_CLIENT_NEWGRFS_CHECKED) return; } - NetworkClientInfo *ci = DEREF_CLIENT_INFO(cs); + NetworkClientInfo *ci = cs->GetInfo(); /* We now want a password from the client else we do not allow him in! */ if (!StrEmpty(_settings_client.network.server_password)) { @@ -685,7 +685,7 @@ DEF_SERVER_RECEIVE_COMMAND(PACKET_CLIENT_JOIN) return; } - ci = DEREF_CLIENT_INFO(cs); + ci = cs->GetInfo(); strecpy(ci->client_name, name, lastof(ci->client_name)); strecpy(ci->unique_id, unique_id, lastof(ci->unique_id)); @@ -719,7 +719,7 @@ DEF_SERVER_RECEIVE_COMMAND(PACKET_CLIENT_PASSWORD) return; } - ci = DEREF_CLIENT_INFO(cs); + ci = cs->GetInfo(); if (IsValidCompanyID(ci->client_playas) && !StrEmpty(_network_company_states[ci->client_playas].password)) { SEND_COMMAND(PACKET_SERVER_NEED_PASSWORD)(cs, NETWORK_COMPANY_PASSWORD); @@ -730,7 +730,7 @@ DEF_SERVER_RECEIVE_COMMAND(PACKET_CLIENT_PASSWORD) SEND_COMMAND(PACKET_SERVER_WELCOME)(cs); return; } else if (cs->status == STATUS_AUTHORIZING && type == NETWORK_COMPANY_PASSWORD) { - ci = DEREF_CLIENT_INFO(cs); + ci = cs->GetInfo(); if (strcmp(password, _network_company_states[ci->client_playas].password) != 0) { // Password is invalid @@ -797,7 +797,7 @@ DEF_SERVER_RECEIVE_COMMAND(PACKET_CLIENT_MAP_OK) FOR_ALL_CLIENTS(new_cs) { if (new_cs->status > STATUS_AUTH) { - SEND_COMMAND(PACKET_SERVER_CLIENT_INFO)(new_cs, DEREF_CLIENT_INFO(cs)); + SEND_COMMAND(PACKET_SERVER_CLIENT_INFO)(new_cs, cs->GetInfo()); SEND_COMMAND(PACKET_SERVER_JOIN)(new_cs, cs->client_id); } } @@ -873,7 +873,7 @@ DEF_SERVER_RECEIVE_COMMAND(PACKET_CLIENT_COMMAND) return; } - ci = DEREF_CLIENT_INFO(cs); + ci = cs->GetInfo(); /* Check if cp->cmd is valid */ if (!IsValidCommand(cp->cmd)) { @@ -1094,7 +1094,7 @@ void NetworkServerSendChat(NetworkAction action, DestType desttype, int dest, co /* Find all clients that belong to this company */ ci_to = NULL; FOR_ALL_CLIENTS(cs) { - ci = DEREF_CLIENT_INFO(cs); + ci = cs->GetInfo(); if (ci->client_playas == (CompanyID)dest) { SEND_COMMAND(PACKET_SERVER_CHAT)(cs, action, from_id, false, msg); if (cs->client_id == from_id) show_local = false; @@ -1160,7 +1160,7 @@ DEF_SERVER_RECEIVE_COMMAND(PACKET_CLIENT_CHAT) p->Recv_string(msg, NETWORK_CHAT_LENGTH); - const NetworkClientInfo *ci = DEREF_CLIENT_INFO(cs); + const NetworkClientInfo *ci = cs->GetInfo(); switch (action) { case NETWORK_ACTION_GIVE_MONEY: if (!IsValidCompanyID(ci->client_playas)) break; @@ -1189,7 +1189,7 @@ DEF_SERVER_RECEIVE_COMMAND(PACKET_CLIENT_SET_PASSWORD) const NetworkClientInfo *ci; p->Recv_string(password, sizeof(password)); - ci = DEREF_CLIENT_INFO(cs); + ci = cs->GetInfo(); if (IsValidCompanyID(ci->client_playas)) { strecpy(_network_company_states[ci->client_playas].password, password, lastof(_network_company_states[ci->client_playas].password)); @@ -1208,7 +1208,7 @@ DEF_SERVER_RECEIVE_COMMAND(PACKET_CLIENT_SET_NAME) NetworkClientInfo *ci; p->Recv_string(client_name, sizeof(client_name)); - ci = DEREF_CLIENT_INFO(cs); + ci = cs->GetInfo(); if (cs->has_quit) return; @@ -1362,7 +1362,6 @@ static void NetworkCheckRestartMap() (and item 1. happens a year later) */ static void NetworkAutoCleanCompanies() { - NetworkTCPSocketHandler *cs; const NetworkClientInfo *ci; const Company *c; bool clients_in_company[MAX_COMPANIES]; @@ -1372,8 +1371,7 @@ static void NetworkAutoCleanCompanies() memset(clients_in_company, 0, sizeof(clients_in_company)); /* Detect the active companies */ - FOR_ALL_CLIENTS(cs) { - ci = DEREF_CLIENT_INFO(cs); + FOR_ALL_CLIENT_INFOS(ci) { if (IsValidCompanyID(ci->client_playas)) clients_in_company[ci->client_playas] = true; } @@ -1415,7 +1413,6 @@ static void NetworkAutoCleanCompanies() // and it returns true if that succeeded. bool NetworkFindName(char new_name[NETWORK_CLIENT_NAME_LENGTH]) { - NetworkTCPSocketHandler *new_cs; bool found_name = false; byte number = 0; char original_name[NETWORK_CLIENT_NAME_LENGTH]; @@ -1427,8 +1424,7 @@ bool NetworkFindName(char new_name[NETWORK_CLIENT_NAME_LENGTH]) const NetworkClientInfo *ci; found_name = true; - FOR_ALL_CLIENTS(new_cs) { - ci = DEREF_CLIENT_INFO(new_cs); + FOR_ALL_CLIENT_INFOS(ci) { if (strcmp(ci->client_name, new_name) == 0) { // Name already in use found_name = false; @@ -1569,7 +1565,6 @@ void NetworkServerChangeOwner(Owner current_owner, Owner new_owner) { /* The server has to handle all administrative issues, for example * updating and notifying all clients of what has happened */ - NetworkTCPSocketHandler *cs; NetworkClientInfo *ci = NetworkFindClientInfoFromClientID(CLIENT_ID_SERVER); /* The server has just changed from owner */ @@ -1579,8 +1574,7 @@ void NetworkServerChangeOwner(Owner current_owner, Owner new_owner) } /* Find all clients that were in control of this company, and mark them as new_owner */ - FOR_ALL_CLIENTS(cs) { - ci = DEREF_CLIENT_INFO(cs); + FOR_ALL_CLIENT_INFOS(ci) { if (current_owner == ci->client_playas) { ci->client_playas = new_owner; NetworkUpdateClientInfo(ci->client_id); @@ -1612,7 +1606,7 @@ void NetworkServerShowStatusToConsole() NetworkTCPSocketHandler *cs; FOR_ALL_CLIENTS(cs) { int lag = NetworkCalculateLag(cs); - const NetworkClientInfo *ci = DEREF_CLIENT_INFO(cs); + const NetworkClientInfo *ci = cs->GetInfo(); const char* status; status = (cs->status < (ptrdiff_t)lengthof(stat_str) ? stat_str[cs->status] : "unknown"); @@ -1635,10 +1629,8 @@ void NetworkServerSendError(ClientID client_id, NetworkErrorCode error) bool NetworkCompanyHasClients(CompanyID company) { - const NetworkTCPSocketHandler *cs; const NetworkClientInfo *ci; - FOR_ALL_CLIENTS(cs) { - ci = DEREF_CLIENT_INFO(cs); + FOR_ALL_CLIENT_INFOS(ci) { if (ci->client_playas == company) return true; } return false; |