Client clears list and reinitializes controller when the device list updates

This commit is contained in:
Adam Honse 2020-09-28 01:29:35 +00:00
parent 60fd721586
commit 8347644b07
3 changed files with 49 additions and 4 deletions

View file

@ -193,6 +193,7 @@ void NetworkClient::ConnectionThreadFunction()
{
requested_controllers = 0;
server_controller_count = 0;
server_controller_count_received = false;
//Wait for server to connect
std::this_thread::sleep_for(100ms);
@ -204,7 +205,7 @@ void NetworkClient::ConnectionThreadFunction()
SendRequest_ControllerCount();
//Wait for server controller count
while(server_controller_count == 0)
while(!server_controller_count_received)
{
std::this_thread::sleep_for(5ms);
}
@ -394,6 +395,10 @@ void NetworkClient::ListenThreadFunction()
case NET_PACKET_ID_REQUEST_CONTROLLER_DATA:
ProcessReply_ControllerData(header.pkt_size, data, header.pkt_dev_idx);
break;
case NET_PACKET_ID_DEVICE_LIST_UPDATED:
ProcessRequest_DeviceListChanged();
break;
}
delete[] data;
@ -445,6 +450,7 @@ void NetworkClient::ProcessReply_ControllerCount(unsigned int data_size, char *
if(data_size == sizeof(unsigned int))
{
memcpy(&server_controller_count, data, sizeof(unsigned int));
server_controller_count_received = true;
}
}
@ -467,6 +473,35 @@ void NetworkClient::ProcessReply_ControllerData(unsigned int /*data_size*/, char
controller_data_received = true;
}
void NetworkClient::ProcessRequest_DeviceListChanged()
{
for(size_t server_controller_idx = 0; server_controller_idx < server_controllers.size(); server_controller_idx++)
{
for(size_t controller_idx = 0; controller_idx < controllers.size(); controller_idx++)
{
if(controllers[controller_idx] == server_controllers[server_controller_idx])
{
controllers.erase(controllers.begin() + controller_idx);
break;
}
}
delete server_controllers[server_controller_idx];
}
server_controllers.clear();
/*-------------------------------------------------*\
| Client info has changed, call the callbacks |
\*-------------------------------------------------*/
ClientInfoChanged();
/*-------------------------------------------------*\
| Mark server as uninitialized and delete the list |
\*-------------------------------------------------*/
server_initialized = false;
}
void NetworkClient::SendData_ClientString()
{
NetPacketHeader reply_hdr;

View file

@ -46,6 +46,7 @@ public:
void ProcessReply_ControllerCount(unsigned int data_size, char * data);
void ProcessReply_ControllerData(unsigned int data_size, char * data, unsigned int dev_idx);
void ProcessRequest_DeviceListChanged();
void SendData_ClientString();
@ -79,6 +80,7 @@ private:
bool server_connected;
bool server_initialized;
unsigned int server_controller_count;
bool server_controller_count_received;
std::thread * ConnectionThread;
std::thread * ListenThread;

View file

@ -28,6 +28,14 @@ OpenRGBClientInfoPage::OpenRGBClientInfoPage(std::vector<RGBController *>& contr
ui->ClientIPValue->setText("127.0.0.1");
ui->ClientPortValue->setText(QString::number(OPENRGB_SDK_PORT));
/*-----------------------------------------------------*\
| Register callbacks for existing clients |
\*-----------------------------------------------------*/
for(unsigned int client_idx = 0; client_idx < ResourceManager::get()->GetClients().size(); client_idx++)
{
ResourceManager::get()->GetClients()[client_idx]->RegisterClientInfoChangeCallback(UpdateInfoCallback, this);
}
/*-----------------------------------------------------*\
| Update the information view |
\*-----------------------------------------------------*/