diff --git a/NetworkServer.cpp b/NetworkServer.cpp index 07d86242..6ccab928 100644 --- a/NetworkServer.cpp +++ b/NetworkServer.cpp @@ -33,6 +33,21 @@ NetworkServer::NetworkServer(std::vector& control) : controller server_online = false; } +void NetworkServer::ClientInfoChanged() +{ + ClientInfoChangeMutex.lock(); + + /*-------------------------------------------------*\ + | Client info has changed, call the callbacks | + \*-------------------------------------------------*/ + for(unsigned int callback_idx = 0; callback_idx < ClientInfoChangeCallbacks.size(); callback_idx++) + { + ClientInfoChangeCallbacks[callback_idx](ClientInfoChangeCallbackArgs[callback_idx]); + } + + ClientInfoChangeMutex.unlock(); +} + unsigned short NetworkServer::GetPort() { return port_num; @@ -170,10 +185,7 @@ void NetworkServer::StopServer() /*-------------------------------------------------*\ | Client info has changed, call the callbacks | \*-------------------------------------------------*/ - for(unsigned int callback_idx = 0; callback_idx < ClientInfoChangeCallbacks.size(); callback_idx++) - { - ClientInfoChangeCallbacks[callback_idx](ClientInfoChangeCallbackArgs[callback_idx]); - } + ClientInfoChanged(); } void NetworkServer::ConnectionThreadFunction() @@ -236,10 +248,7 @@ void NetworkServer::ConnectionThreadFunction() /*-------------------------------------------------*\ | Client info has changed, call the callbacks | \*-------------------------------------------------*/ - for(unsigned int callback_idx = 0; callback_idx < ClientInfoChangeCallbacks.size(); callback_idx++) - { - ClientInfoChangeCallbacks[callback_idx](ClientInfoChangeCallbackArgs[callback_idx]); - } + ClientInfoChanged(); } printf("Connection thread closed\r\n"); @@ -432,7 +441,7 @@ void NetworkServer::ListenThreadFunction(NetworkClientInfo * client_info) break; case NET_PACKET_ID_SET_CLIENT_NAME: - //printf "NET_PACKET_ID_SET_CLIENT_NAME\r\n" ); + printf( "NET_PACKET_ID_SET_CLIENT_NAME\r\n" ); ProcessRequest_ClientString(client_sock, header.pkt_size, data); break; @@ -529,10 +538,7 @@ listen_done: /*-------------------------------------------------*\ | Client info has changed, call the callbacks | \*-------------------------------------------------*/ - for(unsigned int callback_idx = 0; callback_idx < ClientInfoChangeCallbacks.size(); callback_idx++) - { - ClientInfoChangeCallbacks[callback_idx](ClientInfoChangeCallbackArgs[callback_idx]); - } + ClientInfoChanged(); } void NetworkServer::ProcessRequest_ClientString(int client_sock, unsigned int data_size, char *data) @@ -549,10 +555,7 @@ void NetworkServer::ProcessRequest_ClientString(int client_sock, unsigned int da /*-------------------------------------------------*\ | Client info has changed, call the callbacks | \*-------------------------------------------------*/ - for(unsigned int callback_idx = 0; callback_idx < ClientInfoChangeCallbacks.size(); callback_idx++) - { - ClientInfoChangeCallbacks[callback_idx](ClientInfoChangeCallbackArgs[callback_idx]); - } + ClientInfoChanged(); } void NetworkServer::SendReply_ControllerCount(SOCKET client_sock) diff --git a/NetworkServer.h b/NetworkServer.h index 17a57760..222ee49e 100644 --- a/NetworkServer.h +++ b/NetworkServer.h @@ -2,6 +2,7 @@ #include "NetworkProtocol.h" #include "net_port.h" +#include #include #pragma once @@ -27,6 +28,7 @@ public: const char * GetClientString(unsigned int client_num); const char * GetClientIP(unsigned int client_num); + void ClientInfoChanged(); void RegisterClientInfoChangeCallback(NetServerCallback, void * new_callback_arg); void SetPort(unsigned short new_port); @@ -51,6 +53,7 @@ protected: std::vector ServerClients; std::thread * ConnectionThread; + std::mutex ClientInfoChangeMutex; std::vector ClientInfoChangeCallbacks; std::vector ClientInfoChangeCallbackArgs;