Client clears list and reinitializes controller when the device list updates
This commit is contained in:
parent
60fd721586
commit
8347644b07
3 changed files with 49 additions and 4 deletions
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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 |
|
||||||
\*-----------------------------------------------------*/
|
\*-----------------------------------------------------*/
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue