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

@ -191,8 +191,9 @@ void NetworkClient::ConnectionThreadFunction()
if(server_initialized == false && server_connected == true) if(server_initialized == false && server_connected == true)
{ {
requested_controllers = 0; requested_controllers = 0;
server_controller_count = 0; server_controller_count = 0;
server_controller_count_received = false;
//Wait for server to connect //Wait for server to connect
std::this_thread::sleep_for(100ms); std::this_thread::sleep_for(100ms);
@ -204,7 +205,7 @@ void NetworkClient::ConnectionThreadFunction()
SendRequest_ControllerCount(); SendRequest_ControllerCount();
//Wait for server controller count //Wait for server controller count
while(server_controller_count == 0) while(!server_controller_count_received)
{ {
std::this_thread::sleep_for(5ms); std::this_thread::sleep_for(5ms);
} }
@ -394,6 +395,10 @@ void NetworkClient::ListenThreadFunction()
case NET_PACKET_ID_REQUEST_CONTROLLER_DATA: case NET_PACKET_ID_REQUEST_CONTROLLER_DATA:
ProcessReply_ControllerData(header.pkt_size, data, header.pkt_dev_idx); ProcessReply_ControllerData(header.pkt_size, data, header.pkt_dev_idx);
break; break;
case NET_PACKET_ID_DEVICE_LIST_UPDATED:
ProcessRequest_DeviceListChanged();
break;
} }
delete[] data; delete[] data;
@ -445,6 +450,7 @@ void NetworkClient::ProcessReply_ControllerCount(unsigned int data_size, char *
if(data_size == sizeof(unsigned int)) if(data_size == sizeof(unsigned int))
{ {
memcpy(&server_controller_count, data, 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; 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() void NetworkClient::SendData_ClientString()
{ {
NetPacketHeader reply_hdr; NetPacketHeader reply_hdr;

View file

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

View file

@ -28,6 +28,14 @@ OpenRGBClientInfoPage::OpenRGBClientInfoPage(std::vector<RGBController *>& contr
ui->ClientIPValue->setText("127.0.0.1"); ui->ClientIPValue->setText("127.0.0.1");
ui->ClientPortValue->setText(QString::number(OPENRGB_SDK_PORT)); 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 | | Update the information view |
\*-----------------------------------------------------*/ \*-----------------------------------------------------*/