From 981cd0197a8f180dd3a29e83d1c088dcb52e4920 Mon Sep 17 00:00:00 2001 From: rubidium42 Date: Mon, 14 Jun 2021 16:09:50 +0200 Subject: Codechange: [Network] Use std::string for the client name in the network server --- src/network/network_server.cpp | 41 ++++++++++++----------------------------- src/network/network_server.h | 2 +- 2 files changed, 13 insertions(+), 30 deletions(-) diff --git a/src/network/network_server.cpp b/src/network/network_server.cpp index d67343359..d44b61d3d 100644 --- a/src/network/network_server.cpp +++ b/src/network/network_server.cpp @@ -258,9 +258,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::CloseConnection(NetworkRecvSta if (status != NETWORK_RECV_STATUS_CLIENT_QUIT && status != NETWORK_RECV_STATUS_SERVER_ERROR && !this->HasClientQuit() && this->status >= STATUS_AUTHORIZED) { /* We did not receive a leave message from this client... */ - char client_name[NETWORK_CLIENT_NAME_LENGTH]; - - this->GetClientName(client_name, lastof(client_name)); + std::string client_name = this->GetClientName(); NetworkTextMessage(NETWORK_ACTION_LEAVE, CC_DEFAULT, false, client_name, "", STR_NETWORK_ERROR_CLIENT_CONNECTION_LOST); @@ -381,9 +379,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendCompanyInfo() } for (NetworkClientSocket *csi : NetworkClientSocket::Iterate()) { - char client_name[NETWORK_CLIENT_NAME_LENGTH]; - - ((ServerNetworkGameSocketHandler*)csi)->GetClientName(client_name, lastof(client_name)); + std::string client_name = static_cast(csi)->GetClientName(); ci = csi->GetInfo(); if (ci != nullptr && Company::IsValidID(ci->client_playas)) { @@ -441,9 +437,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendError(NetworkErrorCode err /* Only send when the current client was in game */ if (this->status > STATUS_AUTHORIZED) { - char client_name[NETWORK_CLIENT_NAME_LENGTH]; - - this->GetClientName(client_name, lastof(client_name)); + std::string client_name = this->GetClientName(); Debug(net, 1, "'{}' made an error and has been disconnected: {}", client_name, GetString(strid)); @@ -1010,9 +1004,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_MAP_OK(Packet * { /* Client has the map, now start syncing */ if (this->status == STATUS_DONE_MAP && !this->HasClientQuit()) { - char client_name[NETWORK_CLIENT_NAME_LENGTH]; - - this->GetClientName(client_name, lastof(client_name)); + std::string client_name = this->GetClientName(); NetworkTextMessage(NETWORK_ACTION_JOIN, CC_DEFAULT, false, client_name, "", this->client_id); InvalidateWindowData(WC_CLIENT_LIST, 0); @@ -1121,7 +1113,6 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_ERROR(Packet *p { /* This packets means a client noticed an error and is reporting this * to us. Display the error and report it to the other clients */ - char client_name[NETWORK_CLIENT_NAME_LENGTH]; NetworkErrorCode errorno = (NetworkErrorCode)p->Recv_uint8(); /* The client was never joined.. thank the client for the packet, but ignore it */ @@ -1129,8 +1120,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_ERROR(Packet *p return this->CloseConnection(NETWORK_RECV_STATUS_CLIENT_QUIT); } - this->GetClientName(client_name, lastof(client_name)); - + std::string client_name = this->GetClientName(); StringID strid = GetNetworkErrorMsg(errorno); Debug(net, 1, "'{}' reported an error and is closing its connection: {}", client_name, GetString(strid)); @@ -1150,17 +1140,13 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_ERROR(Packet *p NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_QUIT(Packet *p) { - /* The client wants to leave. Display this and report it to the other - * clients. */ - char client_name[NETWORK_CLIENT_NAME_LENGTH]; - /* The client was never joined.. thank the client for the packet, but ignore it */ if (this->status < STATUS_DONE_MAP || this->HasClientQuit()) { return this->CloseConnection(NETWORK_RECV_STATUS_CLIENT_QUIT); } - this->GetClientName(client_name, lastof(client_name)); - + /* The client wants to leave. Display this and report it to the other clients. */ + std::string client_name = this->GetClientName(); NetworkTextMessage(NETWORK_ACTION_LEAVE, CC_DEFAULT, false, client_name, "", STR_NETWORK_MESSAGE_CLIENT_LEAVING); for (NetworkClientSocket *new_cs : NetworkClientSocket::Iterate()) { @@ -2122,15 +2108,12 @@ bool NetworkCompanyHasClients(CompanyID company) * @param client_name The variable to write the name to. * @param last The pointer to the last element of the destination buffer */ -void ServerNetworkGameSocketHandler::GetClientName(char *client_name, const char *last) const +std::string ServerNetworkGameSocketHandler::GetClientName() const { const NetworkClientInfo *ci = this->GetInfo(); + if (ci != nullptr && !ci->client_name.empty()) return ci->client_name; - if (ci == nullptr || ci->client_name.empty()) { - seprintf(client_name, last, "Client #%4d", this->client_id); - } else { - strecpy(client_name, ci->client_name.c_str(), last); - } + return fmt::format("Client #{}", this->client_id); } /** @@ -2142,13 +2125,13 @@ void NetworkPrintClients() if (_network_server) { IConsolePrint(CC_INFO, "Client #{} name: '{}' company: {} IP: {}", ci->client_id, - ci->client_name.c_str(), + ci->client_name, ci->client_playas + (Company::IsValidID(ci->client_playas) ? 1 : 0), ci->client_id == CLIENT_ID_SERVER ? "server" : NetworkClientSocket::GetByClientID(ci->client_id)->GetClientIP()); } else { IConsolePrint(CC_INFO, "Client #{} name: '{}' company: {}", ci->client_id, - ci->client_name.c_str(), + ci->client_name, ci->client_playas + (Company::IsValidID(ci->client_playas) ? 1 : 0)); } } diff --git a/src/network/network_server.h b/src/network/network_server.h index fe15e2a54..76bc95dbc 100644 --- a/src/network/network_server.h +++ b/src/network/network_server.h @@ -79,7 +79,7 @@ public: virtual Packet *ReceivePacket() override; NetworkRecvStatus CloseConnection(NetworkRecvStatus status) override; - void GetClientName(char *client_name, const char *last) const; + std::string GetClientName() const; void CheckNextClientToSendMap(NetworkClientSocket *ignore_cs = nullptr); -- cgit v1.2.3-54-g00ecf