diff --git a/NetworkClient.cpp b/NetworkClient.cpp index 2037cc64..e0cfd933 100644 --- a/NetworkClient.cpp +++ b/NetworkClient.cpp @@ -647,8 +647,10 @@ void NetworkClient::SendData_ClientString() InitNetPacketHeader(&reply_hdr, 0, NET_PACKET_ID_SET_CLIENT_NAME, strlen(client_name.c_str()) + 1); + send_in_progress.lock(); send(client_sock, (char *)&reply_hdr, sizeof(NetPacketHeader), MSG_NOSIGNAL); send(client_sock, (char *)client_name.c_str(), reply_hdr.pkt_size, MSG_NOSIGNAL); + send_in_progress.unlock(); } void NetworkClient::SendRequest_ControllerCount() @@ -657,7 +659,9 @@ void NetworkClient::SendRequest_ControllerCount() InitNetPacketHeader(&request_hdr, 0, NET_PACKET_ID_REQUEST_CONTROLLER_COUNT, 0); + send_in_progress.lock(); send(client_sock, (char *)&request_hdr, sizeof(NetPacketHeader), MSG_NOSIGNAL); + send_in_progress.unlock(); } void NetworkClient::SendRequest_ControllerData(unsigned int dev_idx) @@ -676,7 +680,9 @@ void NetworkClient::SendRequest_ControllerData(unsigned int dev_idx) { request_hdr.pkt_size = 0; + send_in_progress.lock(); send(client_sock, (char *)&request_hdr, sizeof(NetPacketHeader), MSG_NOSIGNAL); + send_in_progress.unlock(); } else { @@ -695,8 +701,10 @@ void NetworkClient::SendRequest_ControllerData(unsigned int dev_idx) protocol_version = server_protocol_version; } + send_in_progress.lock(); send(client_sock, (char *)&request_hdr, sizeof(NetPacketHeader), MSG_NOSIGNAL); send(client_sock, (char *)&protocol_version, sizeof(unsigned int), MSG_NOSIGNAL); + send_in_progress.unlock(); } } @@ -709,8 +717,10 @@ void NetworkClient::SendRequest_ProtocolVersion() request_data = OPENRGB_SDK_PROTOCOL_VERSION; + send_in_progress.lock(); send(client_sock, (char *)&request_hdr, sizeof(NetPacketHeader), MSG_NOSIGNAL); send(client_sock, (char *)&request_data, sizeof(unsigned int), MSG_NOSIGNAL); + send_in_progress.unlock(); } void NetworkClient::SendRequest_RGBController_ResizeZone(unsigned int dev_idx, int zone, int new_size) @@ -728,8 +738,10 @@ void NetworkClient::SendRequest_RGBController_ResizeZone(unsigned int dev_idx, i request_data[0] = zone; request_data[1] = new_size; + send_in_progress.lock(); send(client_sock, (char *)&request_hdr, sizeof(NetPacketHeader), MSG_NOSIGNAL); send(client_sock, (char *)&request_data, sizeof(request_data), MSG_NOSIGNAL); + send_in_progress.unlock(); } void NetworkClient::SendRequest_RGBController_UpdateLEDs(unsigned int dev_idx, unsigned char * data, unsigned int size) @@ -743,8 +755,10 @@ void NetworkClient::SendRequest_RGBController_UpdateLEDs(unsigned int dev_idx, u InitNetPacketHeader(&request_hdr, dev_idx, NET_PACKET_ID_RGBCONTROLLER_UPDATELEDS, size); + send_in_progress.lock(); send(client_sock, (char *)&request_hdr, sizeof(NetPacketHeader), MSG_NOSIGNAL); send(client_sock, (char *)data, size, 0); + send_in_progress.unlock(); } void NetworkClient::SendRequest_RGBController_UpdateZoneLEDs(unsigned int dev_idx, unsigned char * data, unsigned int size) @@ -758,8 +772,10 @@ void NetworkClient::SendRequest_RGBController_UpdateZoneLEDs(unsigned int dev_id InitNetPacketHeader(&request_hdr, dev_idx, NET_PACKET_ID_RGBCONTROLLER_UPDATEZONELEDS, size); + send_in_progress.lock(); send(client_sock, (char *)&request_hdr, sizeof(NetPacketHeader), MSG_NOSIGNAL); send(client_sock, (char *)data, size, MSG_NOSIGNAL); + send_in_progress.unlock(); } void NetworkClient::SendRequest_RGBController_UpdateSingleLED(unsigned int dev_idx, unsigned char * data, unsigned int size) @@ -773,8 +789,10 @@ void NetworkClient::SendRequest_RGBController_UpdateSingleLED(unsigned int dev_i InitNetPacketHeader(&request_hdr, dev_idx, NET_PACKET_ID_RGBCONTROLLER_UPDATESINGLELED, size); + send_in_progress.lock(); send(client_sock, (char *)&request_hdr, sizeof(NetPacketHeader), MSG_NOSIGNAL); send(client_sock, (char *)data, size, MSG_NOSIGNAL); + send_in_progress.unlock(); } void NetworkClient::SendRequest_RGBController_SetCustomMode(unsigned int dev_idx) @@ -788,7 +806,9 @@ void NetworkClient::SendRequest_RGBController_SetCustomMode(unsigned int dev_idx InitNetPacketHeader(&request_hdr, dev_idx, NET_PACKET_ID_RGBCONTROLLER_SETCUSTOMMODE, 0); + send_in_progress.lock(); send(client_sock, (char *)&request_hdr, sizeof(NetPacketHeader), MSG_NOSIGNAL); + send_in_progress.unlock(); } void NetworkClient::SendRequest_RGBController_UpdateMode(unsigned int dev_idx, unsigned char * data, unsigned int size) @@ -802,8 +822,10 @@ void NetworkClient::SendRequest_RGBController_UpdateMode(unsigned int dev_idx, u InitNetPacketHeader(&request_hdr, dev_idx, NET_PACKET_ID_RGBCONTROLLER_UPDATEMODE, size); + send_in_progress.lock(); send(client_sock, (char *)&request_hdr, sizeof(NetPacketHeader), MSG_NOSIGNAL); send(client_sock, (char *)data, size, MSG_NOSIGNAL); + send_in_progress.unlock(); } void NetworkClient::SendRequest_RGBController_SaveMode(unsigned int dev_idx, unsigned char * data, unsigned int size) @@ -817,8 +839,10 @@ void NetworkClient::SendRequest_RGBController_SaveMode(unsigned int dev_idx, uns InitNetPacketHeader(&request_hdr, dev_idx, NET_PACKET_ID_RGBCONTROLLER_SAVEMODE, size); + send_in_progress.lock(); send(client_sock, (char *)&request_hdr, sizeof(NetPacketHeader), MSG_NOSIGNAL); send(client_sock, (char *)data, size, MSG_NOSIGNAL); + send_in_progress.unlock(); } void NetworkClient::SendRequest_LoadProfile(std::string profile_name) @@ -827,8 +851,10 @@ void NetworkClient::SendRequest_LoadProfile(std::string profile_name) InitNetPacketHeader(&reply_hdr, 0, NET_PACKET_ID_REQUEST_LOAD_PROFILE, strlen(profile_name.c_str()) + 1); + send_in_progress.lock(); send(client_sock, (char *)&reply_hdr, sizeof(NetPacketHeader), MSG_NOSIGNAL); send(client_sock, (char *)profile_name.c_str(), reply_hdr.pkt_size, MSG_NOSIGNAL); + send_in_progress.unlock(); } void NetworkClient::SendRequest_SaveProfile(std::string profile_name) @@ -837,8 +863,10 @@ void NetworkClient::SendRequest_SaveProfile(std::string profile_name) InitNetPacketHeader(&reply_hdr, 0, NET_PACKET_ID_REQUEST_SAVE_PROFILE, strlen(profile_name.c_str()) + 1); + send_in_progress.lock(); send(client_sock, (char *)&reply_hdr, sizeof(NetPacketHeader), MSG_NOSIGNAL); send(client_sock, (char *)profile_name.c_str(), reply_hdr.pkt_size, MSG_NOSIGNAL); + send_in_progress.unlock(); } void NetworkClient::SendRequest_DeleteProfile(std::string profile_name) @@ -847,8 +875,10 @@ void NetworkClient::SendRequest_DeleteProfile(std::string profile_name) InitNetPacketHeader(&reply_hdr, 0, NET_PACKET_ID_REQUEST_DELETE_PROFILE, strlen(profile_name.c_str()) + 1); + send_in_progress.lock(); send(client_sock, (char *)&reply_hdr, sizeof(NetPacketHeader), MSG_NOSIGNAL); send(client_sock, (char *)profile_name.c_str(), reply_hdr.pkt_size, MSG_NOSIGNAL); + send_in_progress.unlock(); } void NetworkClient::SendRequest_GetProfileList() @@ -857,7 +887,9 @@ void NetworkClient::SendRequest_GetProfileList() InitNetPacketHeader(&reply_hdr, 0, NET_PACKET_ID_REQUEST_PROFILE_LIST, 0); + send_in_progress.lock(); send(client_sock, (char *)&reply_hdr, sizeof(NetPacketHeader), MSG_NOSIGNAL); + send_in_progress.unlock(); } std::vector * NetworkClient::ProcessReply_ProfileList(unsigned int data_size, char * data) diff --git a/NetworkClient.h b/NetworkClient.h index aebc1b45..30d22747 100644 --- a/NetworkClient.h +++ b/NetworkClient.h @@ -102,6 +102,7 @@ private: unsigned int server_protocol_version; bool server_protocol_version_received; bool change_in_progress; + std::mutex send_in_progress; std::thread * ConnectionThread; std::thread * ListenThread;