Rework handling of NetworkClient callbacks to route them through ResourceManager and move connection of saved clients to after autoconnection of local client in InitCoroutine
This commit is contained in:
parent
a30617d971
commit
d8b9159125
4 changed files with 84 additions and 42 deletions
|
|
@ -183,42 +183,6 @@ ResourceManager::ResourceManager()
|
||||||
server->SetLegacyWorkaroundEnable(true);
|
server->SetLegacyWorkaroundEnable(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*-----------------------------------------------------*\
|
|
||||||
| Initialize Saved Client Connections |
|
|
||||||
\*-----------------------------------------------------*/
|
|
||||||
json client_settings = settings_manager->GetSettings("Client");
|
|
||||||
|
|
||||||
if(client_settings.contains("clients"))
|
|
||||||
{
|
|
||||||
for(unsigned int client_idx = 0; client_idx < client_settings["clients"].size(); client_idx++)
|
|
||||||
{
|
|
||||||
NetworkClient * client = new NetworkClient(rgb_controllers);
|
|
||||||
|
|
||||||
std::string titleString = "OpenRGB ";
|
|
||||||
titleString.append(VERSION_STRING);
|
|
||||||
|
|
||||||
std::string client_ip = client_settings["clients"][client_idx]["ip"];
|
|
||||||
unsigned short client_port = client_settings["clients"][client_idx]["port"];
|
|
||||||
|
|
||||||
client->SetIP(client_ip.c_str());
|
|
||||||
client->SetName(titleString.c_str());
|
|
||||||
client->SetPort(client_port);
|
|
||||||
|
|
||||||
client->StartClient();
|
|
||||||
|
|
||||||
for(int timeout = 0; timeout < 100; timeout++)
|
|
||||||
{
|
|
||||||
if(client->GetConnected())
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
std::this_thread::sleep_for(10ms);
|
|
||||||
}
|
|
||||||
|
|
||||||
clients.push_back(client);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*-----------------------------------------------------*\
|
/*-----------------------------------------------------*\
|
||||||
| Load sizes list from file |
|
| Load sizes list from file |
|
||||||
\*-----------------------------------------------------*/
|
\*-----------------------------------------------------*/
|
||||||
|
|
@ -434,6 +398,28 @@ void ResourceManager::RegisterPreDetectionHook(PreDetectionHookFunction hook)
|
||||||
pre_detection_hooks.push_back(hook);
|
pre_detection_hooks.push_back(hook);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ResourceManager::RegisterClientInfoChangeCallback(ClientInfoChangeCallback new_callback, void * new_callback_arg)
|
||||||
|
{
|
||||||
|
ClientInfoChangeCallbacks.push_back(new_callback);
|
||||||
|
ClientInfoChangeCallbackArgs.push_back(new_callback_arg);
|
||||||
|
|
||||||
|
LOG_TRACE("[ResourceManager] Registered client info change callback. Total callbacks registered: %d", ClientInfoChangeCallbacks.size());
|
||||||
|
}
|
||||||
|
|
||||||
|
void ResourceManager::UnregisterClientInfoChangeCallback(ClientInfoChangeCallback callback, void * callback_arg)
|
||||||
|
{
|
||||||
|
for(size_t idx = 0; idx < ClientInfoChangeCallbacks.size(); idx++)
|
||||||
|
{
|
||||||
|
if(ClientInfoChangeCallbacks[idx] == callback && ClientInfoChangeCallbackArgs[idx] == callback_arg)
|
||||||
|
{
|
||||||
|
ClientInfoChangeCallbacks.erase(ClientInfoChangeCallbacks.begin() + idx);
|
||||||
|
ClientInfoChangeCallbackArgs.erase(ClientInfoChangeCallbackArgs.begin() + idx);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
LOG_TRACE("[ResourceManager] Unregistered client info change callback. Total callbacks registered: %d", ClientInfoChangeCallbacks.size());
|
||||||
|
}
|
||||||
|
|
||||||
void ResourceManager::RegisterDeviceListChangeCallback(DeviceListChangeCallback new_callback, void * new_callback_arg)
|
void ResourceManager::RegisterDeviceListChangeCallback(DeviceListChangeCallback new_callback, void * new_callback_arg)
|
||||||
{
|
{
|
||||||
DeviceListChangeCallbacks.push_back(new_callback);
|
DeviceListChangeCallbacks.push_back(new_callback);
|
||||||
|
|
@ -587,6 +573,19 @@ void ResourceManager::UpdateDeviceList()
|
||||||
DeviceListChangeMutex.unlock();
|
DeviceListChangeMutex.unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ResourceManager::ClientInfoChanged()
|
||||||
|
{
|
||||||
|
/*-----------------------------------------------------*\
|
||||||
|
| Client info has changed, call the callbacks |
|
||||||
|
\*-----------------------------------------------------*/
|
||||||
|
LOG_TRACE("[ResourceManager] Calling client info change callbacks.");
|
||||||
|
|
||||||
|
for(std::size_t callback_idx = 0; callback_idx < ClientInfoChangeCallbacks.size(); callback_idx++)
|
||||||
|
{
|
||||||
|
ResourceManager::ClientInfoChangeCallbacks[callback_idx](ClientInfoChangeCallbackArgs[callback_idx]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void ResourceManager::DeviceListChanged()
|
void ResourceManager::DeviceListChanged()
|
||||||
{
|
{
|
||||||
/*-----------------------------------------------------*\
|
/*-----------------------------------------------------*\
|
||||||
|
|
@ -594,7 +593,7 @@ void ResourceManager::DeviceListChanged()
|
||||||
\*-----------------------------------------------------*/
|
\*-----------------------------------------------------*/
|
||||||
LOG_TRACE("[ResourceManager] Calling device list change callbacks.");
|
LOG_TRACE("[ResourceManager] Calling device list change callbacks.");
|
||||||
|
|
||||||
for(std::size_t callback_idx = 0; callback_idx < (unsigned int)DeviceListChangeCallbacks.size(); callback_idx++)
|
for(std::size_t callback_idx = 0; callback_idx < DeviceListChangeCallbacks.size(); callback_idx++)
|
||||||
{
|
{
|
||||||
ResourceManager::DeviceListChangeCallbacks[callback_idx](DeviceListChangeCallbackArgs[callback_idx]);
|
ResourceManager::DeviceListChangeCallbacks[callback_idx](DeviceListChangeCallbackArgs[callback_idx]);
|
||||||
}
|
}
|
||||||
|
|
@ -703,6 +702,7 @@ static void NetworkClientInfoChangeCallback(void* this_ptr)
|
||||||
{
|
{
|
||||||
ResourceManager* this_obj = (ResourceManager*)this_ptr;
|
ResourceManager* this_obj = (ResourceManager*)this_ptr;
|
||||||
|
|
||||||
|
this_obj->ClientInfoChanged();
|
||||||
this_obj->DeviceListChanged();
|
this_obj->DeviceListChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1744,6 +1744,42 @@ void ResourceManager::InitCoroutine()
|
||||||
tryAutoConnect = false;
|
tryAutoConnect = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*-----------------------------------------------------*\
|
||||||
|
| Initialize Saved Client Connections |
|
||||||
|
\*-----------------------------------------------------*/
|
||||||
|
json client_settings = settings_manager->GetSettings("Client");
|
||||||
|
|
||||||
|
if(client_settings.contains("clients"))
|
||||||
|
{
|
||||||
|
for(unsigned int client_idx = 0; client_idx < client_settings["clients"].size(); client_idx++)
|
||||||
|
{
|
||||||
|
NetworkClient * client = new NetworkClient(rgb_controllers);
|
||||||
|
|
||||||
|
std::string titleString = "OpenRGB ";
|
||||||
|
titleString.append(VERSION_STRING);
|
||||||
|
|
||||||
|
std::string client_ip = client_settings["clients"][client_idx]["ip"];
|
||||||
|
unsigned short client_port = client_settings["clients"][client_idx]["port"];
|
||||||
|
|
||||||
|
client->SetIP(client_ip.c_str());
|
||||||
|
client->SetName(titleString.c_str());
|
||||||
|
client->SetPort(client_port);
|
||||||
|
|
||||||
|
client->StartClient();
|
||||||
|
|
||||||
|
for(int timeout = 0; timeout < 100; timeout++)
|
||||||
|
{
|
||||||
|
if(client->GetConnected())
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
std::this_thread::sleep_for(10ms);
|
||||||
|
}
|
||||||
|
|
||||||
|
RegisterNetworkClient(client);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*-----------------------------------------------------*\
|
/*-----------------------------------------------------*\
|
||||||
| Perform actual detection if enabled |
|
| Perform actual detection if enabled |
|
||||||
| Done in the same thread (InitThread), as we need to |
|
| Done in the same thread (InitThread), as we need to |
|
||||||
|
|
|
||||||
|
|
@ -141,12 +141,14 @@ public:
|
||||||
void RegisterDynamicDetector (std::string name, DynamicDetectorFunction detector);
|
void RegisterDynamicDetector (std::string name, DynamicDetectorFunction detector);
|
||||||
void RegisterPreDetectionHook (PreDetectionHookFunction hook);
|
void RegisterPreDetectionHook (PreDetectionHookFunction hook);
|
||||||
|
|
||||||
|
void RegisterClientInfoChangeCallback(ClientInfoChangeCallback new_callback, void * new_callback_arg);
|
||||||
void RegisterDeviceListChangeCallback(DeviceListChangeCallback new_callback, void * new_callback_arg);
|
void RegisterDeviceListChangeCallback(DeviceListChangeCallback new_callback, void * new_callback_arg);
|
||||||
void RegisterDetectionProgressCallback(DetectionProgressCallback new_callback, void * new_callback_arg);
|
void RegisterDetectionProgressCallback(DetectionProgressCallback new_callback, void * new_callback_arg);
|
||||||
void RegisterDetectionStartCallback(DetectionStartCallback new_callback, void * new_callback_arg);
|
void RegisterDetectionStartCallback(DetectionStartCallback new_callback, void * new_callback_arg);
|
||||||
void RegisterDetectionEndCallback(DetectionEndCallback new_callback, void * new_callback_arg);
|
void RegisterDetectionEndCallback(DetectionEndCallback new_callback, void * new_callback_arg);
|
||||||
void RegisterI2CBusListChangeCallback(I2CBusListChangeCallback new_callback, void * new_callback_arg);
|
void RegisterI2CBusListChangeCallback(I2CBusListChangeCallback new_callback, void * new_callback_arg);
|
||||||
|
|
||||||
|
void UnregisterClientInfoChangeCallback(ClientInfoChangeCallback new_callback, void * new_callback_arg);
|
||||||
void UnregisterDeviceListChangeCallback(DeviceListChangeCallback callback, void * callback_arg);
|
void UnregisterDeviceListChangeCallback(DeviceListChangeCallback callback, void * callback_arg);
|
||||||
void UnregisterDetectionProgressCallback(DetectionProgressCallback callback, void *callback_arg);
|
void UnregisterDetectionProgressCallback(DetectionProgressCallback callback, void *callback_arg);
|
||||||
void UnregisterDetectionStartCallback(DetectionStartCallback callback, void *callback_arg);
|
void UnregisterDetectionStartCallback(DetectionStartCallback callback, void *callback_arg);
|
||||||
|
|
@ -173,6 +175,7 @@ public:
|
||||||
void ProcessPreDetectionHooks(); // Consider making private
|
void ProcessPreDetectionHooks(); // Consider making private
|
||||||
void ProcessDynamicDetectors(); // Consider making private
|
void ProcessDynamicDetectors(); // Consider making private
|
||||||
void UpdateDeviceList();
|
void UpdateDeviceList();
|
||||||
|
void ClientInfoChanged();
|
||||||
void DeviceListChanged();
|
void DeviceListChanged();
|
||||||
void DetectionProgressChanged();
|
void DetectionProgressChanged();
|
||||||
void I2CBusListChanged();
|
void I2CBusListChanged();
|
||||||
|
|
@ -315,6 +318,11 @@ private:
|
||||||
std::vector<bool> detection_size_entry_used;
|
std::vector<bool> detection_size_entry_used;
|
||||||
const char* detection_string;
|
const char* detection_string;
|
||||||
|
|
||||||
|
/*-------------------------------------------------------------------------------------*\
|
||||||
|
| Client Info Changed Callback |
|
||||||
|
\*-------------------------------------------------------------------------------------*/
|
||||||
|
std::vector<ClientInfoChangeCallback> ClientInfoChangeCallbacks;
|
||||||
|
std::vector<void *> ClientInfoChangeCallbackArgs;
|
||||||
|
|
||||||
/*-------------------------------------------------------------------------------------*\
|
/*-------------------------------------------------------------------------------------*\
|
||||||
| Device List Changed Callback |
|
| Device List Changed Callback |
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,7 @@ class ProfileManager;
|
||||||
class RGBController;
|
class RGBController;
|
||||||
class SettingsManager;
|
class SettingsManager;
|
||||||
|
|
||||||
|
typedef void (*ClientInfoChangeCallback)(void *);
|
||||||
typedef void (*DeviceListChangeCallback)(void *);
|
typedef void (*DeviceListChangeCallback)(void *);
|
||||||
typedef void (*DetectionProgressCallback)(void *);
|
typedef void (*DetectionProgressCallback)(void *);
|
||||||
typedef void (*DetectionStartCallback)(void *);
|
typedef void (*DetectionStartCallback)(void *);
|
||||||
|
|
|
||||||
|
|
@ -41,12 +41,9 @@ OpenRGBClientInfoPage::OpenRGBClientInfoPage(QWidget *parent) :
|
||||||
ui->ClientPortValue->setText(QString::number(OPENRGB_SDK_PORT));
|
ui->ClientPortValue->setText(QString::number(OPENRGB_SDK_PORT));
|
||||||
|
|
||||||
/*-----------------------------------------------------*\
|
/*-----------------------------------------------------*\
|
||||||
| Register callbacks for existing clients |
|
| Register callbacks with resource manager |
|
||||||
\*-----------------------------------------------------*/
|
\*-----------------------------------------------------*/
|
||||||
for(unsigned int client_idx = 0; client_idx < ResourceManager::get()->GetClients().size(); client_idx++)
|
ResourceManager::get()->RegisterClientInfoChangeCallback(UpdateInfoCallback, this);
|
||||||
{
|
|
||||||
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