#include "logos_api_client.h" #include "logos_api_consumer.h" #include "logos_object.h" #include "token_manager.h" #include #include LogosAPIClient::LogosAPIClient(const QString& module_to_talk_to, const QString& origin_module, TokenManager* token_manager, QObject *parent) : QObject(parent) , m_consumer(new LogosAPIConsumer(module_to_talk_to, origin_module, token_manager, this)) , m_token_manager(token_manager) , m_origin_module(origin_module) { } LogosAPIClient::LogosAPIClient(const QString& module_to_talk_to, const QString& origin_module, TokenManager* token_manager, const LogosTransportConfig& transport, QObject *parent) : QObject(parent) , m_consumer(new LogosAPIConsumer(module_to_talk_to, origin_module, token_manager, transport, this)) , m_token_manager(token_manager) , m_origin_module(origin_module) { } LogosAPIClient::~LogosAPIClient() { } LogosObject* LogosAPIClient::requestObject(const QString& objectName, Timeout timeout) { return m_consumer->requestObject(objectName, timeout); } bool LogosAPIClient::isConnected() const { return m_consumer->isConnected(); } QString LogosAPIClient::registryUrl() const { return m_consumer->registryUrl(); } bool LogosAPIClient::reconnect() { return m_consumer->reconnect(); } QVariant LogosAPIClient::invokeRemoteMethod(const QString& objectName, const QString& methodName, const QVariantList& args, Timeout timeout) { qDebug() << "LogosAPIClient: invoking remote method" << objectName << methodName << "args_count:" << args.size(); QString token = getToken(objectName); if (token.isEmpty() && objectName != "capability_module") { qDebug() << "LogosAPIClient: calling requestModule for" << objectName; LogosAPIConsumer* packageManagerConsumer = new LogosAPIConsumer("capability_module", m_origin_module, m_token_manager, this); QString capabilityToken = getToken("capability_module"); QVariant result = packageManagerConsumer->invokeRemoteMethod(capabilityToken, "capability_module", "requestModule", QVariantList() << m_origin_module << objectName, timeout); qDebug() << "LogosAPIClient: requestModule result for" << objectName << ":" << result.toString(); token = result.toString(); } return m_consumer->invokeRemoteMethod(token, objectName, methodName, args, timeout); } QVariant LogosAPIClient::invokeRemoteMethod(const QString& objectName, const QString& methodName, const QVariant& arg, Timeout timeout) { return invokeRemoteMethod(objectName, methodName, QVariantList() << arg, timeout); } QVariant LogosAPIClient::invokeRemoteMethod(const QString& objectName, const QString& methodName, const QVariant& arg1, const QVariant& arg2, Timeout timeout) { return invokeRemoteMethod(objectName, methodName, QVariantList() << arg1 << arg2, timeout); } QVariant LogosAPIClient::invokeRemoteMethod(const QString& objectName, const QString& methodName, const QVariant& arg1, const QVariant& arg2, const QVariant& arg3, Timeout timeout) { return invokeRemoteMethod(objectName, methodName, QVariantList() << arg1 << arg2 << arg3, timeout); } QVariant LogosAPIClient::invokeRemoteMethod(const QString& objectName, const QString& methodName, const QVariant& arg1, const QVariant& arg2, const QVariant& arg3, const QVariant& arg4, Timeout timeout) { return invokeRemoteMethod(objectName, methodName, QVariantList() << arg1 << arg2 << arg3 << arg4, timeout); } QVariant LogosAPIClient::invokeRemoteMethod(const QString& objectName, const QString& methodName, const QVariant& arg1, const QVariant& arg2, const QVariant& arg3, const QVariant& arg4, const QVariant& arg5, Timeout timeout) { return invokeRemoteMethod(objectName, methodName, QVariantList() << arg1 << arg2 << arg3 << arg4 << arg5, timeout); } void LogosAPIClient::invokeRemoteMethodAsync(const QString& objectName, const QString& methodName, const QVariantList& args, AsyncResultCallback callback, Timeout timeout) { if (!callback) return; QString token = getToken(objectName); if (token.isEmpty() && objectName != "capability_module") { LogosAPIConsumer* packageManagerConsumer = new LogosAPIConsumer("capability_module", m_origin_module, m_token_manager, this); QString capabilityToken = getToken("capability_module"); QVariant result = packageManagerConsumer->invokeRemoteMethod(capabilityToken, "capability_module", "requestModule", QVariantList() << m_origin_module << objectName, timeout); token = result.toString(); } m_consumer->invokeRemoteMethodAsync(token, objectName, methodName, args, std::move(callback), timeout); } void LogosAPIClient::invokeRemoteMethodAsync(const QString& objectName, const QString& methodName, const QVariant& arg, AsyncResultCallback callback, Timeout timeout) { invokeRemoteMethodAsync(objectName, methodName, QVariantList() << arg, std::move(callback), timeout); } void LogosAPIClient::invokeRemoteMethodAsync(const QString& objectName, const QString& methodName, const QVariant& arg1, const QVariant& arg2, AsyncResultCallback callback, Timeout timeout) { invokeRemoteMethodAsync(objectName, methodName, QVariantList() << arg1 << arg2, std::move(callback), timeout); } void LogosAPIClient::invokeRemoteMethodAsync(const QString& objectName, const QString& methodName, const QVariant& arg1, const QVariant& arg2, const QVariant& arg3, AsyncResultCallback callback, Timeout timeout) { invokeRemoteMethodAsync(objectName, methodName, QVariantList() << arg1 << arg2 << arg3, std::move(callback), timeout); } void LogosAPIClient::invokeRemoteMethodAsync(const QString& objectName, const QString& methodName, const QVariant& arg1, const QVariant& arg2, const QVariant& arg3, const QVariant& arg4, AsyncResultCallback callback, Timeout timeout) { invokeRemoteMethodAsync(objectName, methodName, QVariantList() << arg1 << arg2 << arg3 << arg4, std::move(callback), timeout); } void LogosAPIClient::invokeRemoteMethodAsync(const QString& objectName, const QString& methodName, const QVariant& arg1, const QVariant& arg2, const QVariant& arg3, const QVariant& arg4, const QVariant& arg5, AsyncResultCallback callback, Timeout timeout) { invokeRemoteMethodAsync(objectName, methodName, QVariantList() << arg1 << arg2 << arg3 << arg4 << arg5, std::move(callback), timeout); } void LogosAPIClient::onEvent(LogosObject* originObject, const QString& eventName, std::function callback) { m_consumer->onEvent(originObject, eventName, std::move(callback)); } void LogosAPIClient::onEventResponse(LogosObject* object, const QString& eventName, const QVariantList& data) { qDebug() << "[LogosObject] LogosAPIClient::onEventResponse" << eventName << "-> LogosObject::emitEvent"; if (eventName.isEmpty()) { qWarning() << "LogosAPIClient: Event name cannot be empty"; return; } if (!object) { qWarning() << "LogosAPIClient: Cannot emit event on null object"; return; } object->emitEvent(eventName, data); } void LogosAPIClient::onEventResponse(QObject* object, const QString& eventName, const QVariantList& data) { qDebug() << "[LogosObject] LogosAPIClient::onEventResponse (QObject* compat)" << eventName; if (eventName.isEmpty()) { qWarning() << "LogosAPIClient: Event name cannot be empty"; return; } if (!object) { qWarning() << "LogosAPIClient: Cannot emit event on null QObject"; return; } QMetaObject::invokeMethod(object, "eventResponse", Qt::DirectConnection, Q_ARG(QString, eventName), Q_ARG(QVariantList, data)); } bool LogosAPIClient::informModuleToken(const QString& authToken, const QString& moduleName, const QString& token) { return m_consumer->informModuleToken(authToken, moduleName, token); } bool LogosAPIClient::informModuleToken(const std::string& authToken, const std::string& moduleName, const std::string& token) { return informModuleToken(QString::fromStdString(authToken), QString::fromStdString(moduleName), QString::fromStdString(token)); } bool LogosAPIClient::informModuleToken_module(const QString& authToken, const QString& originModule, const QString& moduleName, const QString& token) { return m_consumer->informModuleToken_module(authToken, originModule, moduleName, token); } TokenManager* LogosAPIClient::getTokenManager() const { return m_token_manager; } QString LogosAPIClient::getToken(const QString& module_name) { qDebug() << "LogosAPIClient: getToken for module:" << module_name; QString token = m_token_manager->getToken(module_name); if (!token.isEmpty()) { qDebug() << "LogosAPIClient: Found token for module:" << module_name; return token; } qDebug() << "LogosAPIClient: No token found for module:" << module_name; return ""; }