From 3001595916756eb4c0938f032eabba76226cf759 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Fri, 3 Mar 2017 22:32:33 +0000 Subject: [PATCH] Change chat arbitrary data field from an int64 to a struct. --- src/network/network.cpp | 4 ++-- src/network/network_admin.cpp | 6 +++--- src/network/network_admin.h | 4 ++-- src/network/network_chat_gui.cpp | 2 +- src/network/network_client.cpp | 9 +++++---- src/network/network_client.h | 2 +- src/network/network_func.h | 4 ++-- src/network/network_internal.h | 2 +- src/network/network_server.cpp | 9 +++++---- src/network/network_server.h | 2 +- src/network/network_type.h | 15 +++++++++++++++ 11 files changed, 38 insertions(+), 21 deletions(-) diff --git a/src/network/network.cpp b/src/network/network.cpp index 0bbdd0d06c..204c24ca07 100644 --- a/src/network/network.cpp +++ b/src/network/network.cpp @@ -230,7 +230,7 @@ bool NetworkCompanyIsPassworded(CompanyID company_id) /* This puts a text-message to the console, or in the future, the chat-box, * (to keep it all a bit more general) * If 'self_send' is true, this is the client who is sending the message */ -void NetworkTextMessage(NetworkAction action, TextColour colour, bool self_send, const char *name, const char *str, int64 data) +void NetworkTextMessage(NetworkAction action, TextColour colour, bool self_send, const char *name, const char *str, NetworkTextMessageData data) { StringID strid; switch (action) { @@ -266,7 +266,7 @@ void NetworkTextMessage(NetworkAction action, TextColour colour, bool self_send, char message[1024]; SetDParamStr(0, name); SetDParamStr(1, str); - SetDParam(2, data); + SetDParam(2, data.data); /* All of these strings start with "***". These characters are interpreted as both left-to-right and * right-to-left characters depending on the context. As the next text might be an user's name, the diff --git a/src/network/network_admin.cpp b/src/network/network_admin.cpp index c1ca3d3bb2..4facb668ae 100644 --- a/src/network/network_admin.cpp +++ b/src/network/network_admin.cpp @@ -473,7 +473,7 @@ NetworkRecvStatus ServerNetworkAdminSocketHandler::SendCompanyStats() * @param msg The actual message. * @param data Arbitrary extra data. */ -NetworkRecvStatus ServerNetworkAdminSocketHandler::SendChat(NetworkAction action, DestType desttype, ClientID client_id, const char *msg, int64 data) +NetworkRecvStatus ServerNetworkAdminSocketHandler::SendChat(NetworkAction action, DestType desttype, ClientID client_id, const char *msg, NetworkTextMessageData data) { Packet *p = new Packet(ADMIN_PACKET_SERVER_CHAT); @@ -481,7 +481,7 @@ NetworkRecvStatus ServerNetworkAdminSocketHandler::SendChat(NetworkAction action p->Send_uint8 (desttype); p->Send_uint32(client_id); p->Send_string(msg); - p->Send_uint64(data); + data.send(p); this->SendPacket(p); return NETWORK_RECV_STATUS_OKAY; @@ -935,7 +935,7 @@ void NetworkAdminCompanyRemove(CompanyID company_id, AdminCompanyRemoveReason bc /** * Send chat to the admin network (if they did opt in for the respective update). */ -void NetworkAdminChat(NetworkAction action, DestType desttype, ClientID client_id, const char *msg, int64 data, bool from_admin) +void NetworkAdminChat(NetworkAction action, DestType desttype, ClientID client_id, const char *msg, NetworkTextMessageData data, bool from_admin) { if (from_admin) return; diff --git a/src/network/network_admin.h b/src/network/network_admin.h index cb478fc7e7..ad780bcf36 100644 --- a/src/network/network_admin.h +++ b/src/network/network_admin.h @@ -65,7 +65,7 @@ public: NetworkRecvStatus SendCompanyEconomy(); NetworkRecvStatus SendCompanyStats(); - NetworkRecvStatus SendChat(NetworkAction action, DestType desttype, ClientID client_id, const char *msg, int64 data); + NetworkRecvStatus SendChat(NetworkAction action, DestType desttype, ClientID client_id, const char *msg, NetworkTextMessageData data); NetworkRecvStatus SendRcon(uint16 colour, const char *command); NetworkRecvStatus SendConsole(const char *origin, const char *command); NetworkRecvStatus SendGameScript(const char *json); @@ -117,7 +117,7 @@ void NetworkAdminCompanyInfo(const Company *company, bool new_company); void NetworkAdminCompanyUpdate(const Company *company); void NetworkAdminCompanyRemove(CompanyID company_id, AdminCompanyRemoveReason bcrr); -void NetworkAdminChat(NetworkAction action, DestType desttype, ClientID client_id, const char *msg, int64 data = 0, bool from_admin = false); +void NetworkAdminChat(NetworkAction action, DestType desttype, ClientID client_id, const char *msg, NetworkTextMessageData data = NetworkTextMessageData(), bool from_admin = false); void NetworkAdminUpdate(AdminUpdateFrequency freq); void NetworkServerSendAdminRcon(AdminIndex admin_index, TextColour colour_code, const char *string); void NetworkAdminConsole(const char *origin, const char *string); diff --git a/src/network/network_chat_gui.cpp b/src/network/network_chat_gui.cpp index 3416762d02..2d5aea5f17 100644 --- a/src/network/network_chat_gui.cpp +++ b/src/network/network_chat_gui.cpp @@ -273,7 +273,7 @@ static void SendChat(const char *buf, DestType type, int dest) { if (StrEmpty(buf)) return; if (!_network_server) { - MyClient::SendChat((NetworkAction)(NETWORK_ACTION_CHAT + type), type, dest, buf, 0); + MyClient::SendChat((NetworkAction)(NETWORK_ACTION_CHAT + type), type, dest, buf, NetworkTextMessageData()); } else { NetworkServerSendChat((NetworkAction)(NETWORK_ACTION_CHAT + type), type, dest, buf, CLIENT_ID_SERVER); } diff --git a/src/network/network_client.cpp b/src/network/network_client.cpp index edfe4587f3..784ab5b83d 100644 --- a/src/network/network_client.cpp +++ b/src/network/network_client.cpp @@ -416,7 +416,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::SendCommand(const CommandPacke } /** Send a chat-packet over the network */ -NetworkRecvStatus ClientNetworkGameSocketHandler::SendChat(NetworkAction action, DestType type, int dest, const char *msg, int64 data) +NetworkRecvStatus ClientNetworkGameSocketHandler::SendChat(NetworkAction action, DestType type, int dest, const char *msg, NetworkTextMessageData data) { Packet *p = new Packet(PACKET_CLIENT_CHAT); @@ -424,7 +424,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::SendChat(NetworkAction action, p->Send_uint8 (type); p->Send_uint32(dest); p->Send_string(msg); - p->Send_uint64(data); + data.send(p); my_client->SendPacket(p); return NETWORK_RECV_STATUS_OKAY; @@ -948,7 +948,8 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_CHAT(Packet *p) ClientID client_id = (ClientID)p->Recv_uint32(); bool self_send = p->Recv_bool(); p->Recv_string(msg, NETWORK_CHAT_LENGTH); - int64 data = p->Recv_uint64(); + NetworkTextMessageData data; + data.recv(p); ci_to = NetworkClientInfo::GetByClientID(client_id); if (ci_to == NULL) return NETWORK_RECV_STATUS_OKAY; @@ -1248,7 +1249,7 @@ void NetworkUpdateClientName() * @param msg The actual message. * @param data Arbitrary extra data. */ -void NetworkClientSendChat(NetworkAction action, DestType type, int dest, const char *msg, int64 data) +void NetworkClientSendChat(NetworkAction action, DestType type, int dest, const char *msg, NetworkTextMessageData data) { MyClient::SendChat(action, type, dest, msg, data); } diff --git a/src/network/network_client.h b/src/network/network_client.h index 23878b5067..fcec46f5f6 100644 --- a/src/network/network_client.h +++ b/src/network/network_client.h @@ -94,7 +94,7 @@ public: static NetworkRecvStatus SendGamePassword(const char *password); static NetworkRecvStatus SendCompanyPassword(const char *password); - static NetworkRecvStatus SendChat(NetworkAction action, DestType type, int dest, const char *msg, int64 data); + static NetworkRecvStatus SendChat(NetworkAction action, DestType type, int dest, const char *msg, NetworkTextMessageData data); static NetworkRecvStatus SendSetPassword(const char *password); static NetworkRecvStatus SendSetName(const char *name); static NetworkRecvStatus SendRCon(const char *password, const char *command); diff --git a/src/network/network_func.h b/src/network/network_func.h index 4f1525b5a4..a4d36011b9 100644 --- a/src/network/network_func.h +++ b/src/network/network_func.h @@ -56,7 +56,7 @@ void NetworkClientsToSpectators(CompanyID cid); void NetworkClientConnectGame(NetworkAddress address, CompanyID join_as, const char *join_server_password = NULL, const char *join_company_password = NULL); void NetworkClientRequestMove(CompanyID company, const char *pass = ""); void NetworkClientSendRcon(const char *password, const char *command); -void NetworkClientSendChat(NetworkAction action, DestType type, int dest, const char *msg, int64 data = 0); +void NetworkClientSendChat(NetworkAction action, DestType type, int dest, const char *msg, NetworkTextMessageData data = NetworkTextMessageData()); bool NetworkClientPreferTeamChat(const NetworkClientInfo *cio); bool NetworkCompanyIsPassworded(CompanyID company_id); bool NetworkMaxCompaniesReached(); @@ -77,7 +77,7 @@ bool NetworkServerChangeClientName(ClientID client_id, const char *new_name); void NetworkServerDoMove(ClientID client_id, CompanyID company_id); void NetworkServerSendRcon(ClientID client_id, TextColour colour_code, const char *string); -void NetworkServerSendChat(NetworkAction action, DestType type, int dest, const char *msg, ClientID from_id, int64 data = 0, bool from_admin = false); +void NetworkServerSendChat(NetworkAction action, DestType type, int dest, const char *msg, ClientID from_id, NetworkTextMessageData data = NetworkTextMessageData(), bool from_admin = false); void NetworkServerKickClient(ClientID client_id); uint NetworkServerKickOrBanIP(ClientID client_id, bool ban); diff --git a/src/network/network_internal.h b/src/network/network_internal.h index ed9a8de6f6..528c197914 100644 --- a/src/network/network_internal.h +++ b/src/network/network_internal.h @@ -165,7 +165,7 @@ void NetworkFreeLocalCommandQueue(); void NetworkSyncCommandQueue(NetworkClientSocket *cs); void NetworkError(StringID error_string); -void NetworkTextMessage(NetworkAction action, TextColour colour, bool self_send, const char *name, const char *str = "", int64 data = 0); +void NetworkTextMessage(NetworkAction action, TextColour colour, bool self_send, const char *name, const char *str = "", NetworkTextMessageData data = NetworkTextMessageData()); uint NetworkCalculateLag(const NetworkClientSocket *cs); StringID GetNetworkErrorMsg(NetworkErrorCode err); bool NetworkFindName(char *new_name, const char *last); diff --git a/src/network/network_server.cpp b/src/network/network_server.cpp index f4ad935262..cb9b99fdb1 100644 --- a/src/network/network_server.cpp +++ b/src/network/network_server.cpp @@ -748,7 +748,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendCommand(const CommandPacke * @param msg The actual message. * @param data Arbitrary extra data. */ -NetworkRecvStatus ServerNetworkGameSocketHandler::SendChat(NetworkAction action, ClientID client_id, bool self_send, const char *msg, int64 data) +NetworkRecvStatus ServerNetworkGameSocketHandler::SendChat(NetworkAction action, ClientID client_id, bool self_send, const char *msg, NetworkTextMessageData data) { if (this->status < STATUS_PRE_ACTIVE) return NETWORK_RECV_STATUS_OKAY; @@ -758,7 +758,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendChat(NetworkAction action, p->Send_uint32(client_id); p->Send_bool (self_send); p->Send_string(msg); - p->Send_uint64(data); + data.send(p); this->SendPacket(p); return NETWORK_RECV_STATUS_OKAY; @@ -1265,7 +1265,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_ACK(Packet *p) * @param data Arbitrary data. * @param from_admin Whether the origin is an admin or not. */ -void NetworkServerSendChat(NetworkAction action, DestType desttype, int dest, const char *msg, ClientID from_id, int64 data, bool from_admin) +void NetworkServerSendChat(NetworkAction action, DestType desttype, int dest, const char *msg, ClientID from_id, NetworkTextMessageData data, bool from_admin) { NetworkClientSocket *cs; const NetworkClientInfo *ci, *ci_own, *ci_to; @@ -1392,7 +1392,8 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_CHAT(Packet *p) char msg[NETWORK_CHAT_LENGTH]; p->Recv_string(msg, NETWORK_CHAT_LENGTH); - int64 data = p->Recv_uint64(); + NetworkTextMessageData data; + data.recv(p); NetworkClientInfo *ci = this->GetInfo(); switch (action) { diff --git a/src/network/network_server.h b/src/network/network_server.h index a52b2c9366..d9079672db 100644 --- a/src/network/network_server.h +++ b/src/network/network_server.h @@ -95,7 +95,7 @@ public: NetworkRecvStatus SendClientInfo(NetworkClientInfo *ci); NetworkRecvStatus SendError(NetworkErrorCode error); - NetworkRecvStatus SendChat(NetworkAction action, ClientID client_id, bool self_send, const char *msg, int64 data); + NetworkRecvStatus SendChat(NetworkAction action, ClientID client_id, bool self_send, const char *msg, NetworkTextMessageData data); NetworkRecvStatus SendJoin(ClientID client_id); NetworkRecvStatus SendFrame(); NetworkRecvStatus SendSync(); diff --git a/src/network/network_type.h b/src/network/network_type.h index b7319e2a21..e3072c8702 100644 --- a/src/network/network_type.h +++ b/src/network/network_type.h @@ -131,5 +131,20 @@ enum NetworkErrorCode { NETWORK_ERROR_END, }; +struct NetworkTextMessageData { + int64 data; + + NetworkTextMessageData(int64 data = 0) + : data(data) { } + + template void recv(T *p) { + this->data = p->Recv_uint64(); + } + + template void send(T *p) const { + p->Send_uint64(this->data); + } +}; + #endif /* ENABLE_NETWORK */ #endif /* NETWORK_TYPE_H */