Files
logos-cpp-sdk/cpp/logos_api_client.cpp
T

215 lines
9.0 KiB
C++
Raw Normal View History

2025-09-30 14:56:47 -04:00
#include "logos_api_client.h"
#include "logos_api_consumer.h"
#include "logos_object.h"
2025-09-30 14:56:47 -04:00
#include "token_manager.h"
#include <QMetaObject>
2025-09-30 14:56:47 -04:00
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()
{
}
LogosObject* LogosAPIClient::requestObject(const QString& objectName, Timeout timeout)
2025-09-30 14:56:47 -04:00
{
return m_consumer->requestObject(objectName, timeout);
2025-09-30 14:56:47 -04:00
}
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)
2025-09-30 14:56:47 -04:00
{
qDebug() << "LogosAPIClient: invoking remote method" << objectName << methodName << "args_count:" << args.size();
2025-09-30 14:56:47 -04:00
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);
2025-09-30 14:56:47 -04:00
qDebug() << "LogosAPIClient: requestModule result for" << objectName << ":" << result.toString();
token = result.toString();
}
return m_consumer->invokeRemoteMethod(token, objectName, methodName, args, timeout);
2025-09-30 14:56:47 -04:00
}
QVariant LogosAPIClient::invokeRemoteMethod(const QString& objectName, const QString& methodName,
const QVariant& arg, Timeout timeout)
2025-09-30 14:56:47 -04:00
{
return invokeRemoteMethod(objectName, methodName, QVariantList() << arg, timeout);
2025-09-30 14:56:47 -04:00
}
QVariant LogosAPIClient::invokeRemoteMethod(const QString& objectName, const QString& methodName,
const QVariant& arg1, const QVariant& arg2, Timeout timeout)
2025-09-30 14:56:47 -04:00
{
return invokeRemoteMethod(objectName, methodName, QVariantList() << arg1 << arg2, timeout);
2025-09-30 14:56:47 -04:00
}
QVariant LogosAPIClient::invokeRemoteMethod(const QString& objectName, const QString& methodName,
const QVariant& arg1, const QVariant& arg2, const QVariant& arg3, Timeout timeout)
2025-09-30 14:56:47 -04:00
{
return invokeRemoteMethod(objectName, methodName, QVariantList() << arg1 << arg2 << arg3, timeout);
2025-09-30 14:56:47 -04:00
}
QVariant LogosAPIClient::invokeRemoteMethod(const QString& objectName, const QString& methodName,
const QVariant& arg1, const QVariant& arg2, const QVariant& arg3,
const QVariant& arg4, Timeout timeout)
2025-09-30 14:56:47 -04:00
{
return invokeRemoteMethod(objectName, methodName, QVariantList() << arg1 << arg2 << arg3 << arg4, timeout);
2025-09-30 14:56:47 -04:00
}
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)
2025-09-30 14:56:47 -04:00
{
return invokeRemoteMethod(objectName, methodName, QVariantList() << arg1 << arg2 << arg3 << arg4 << arg5, timeout);
2025-09-30 14:56:47 -04:00
}
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<void(const QString&, const QVariantList&)> callback)
2025-09-30 14:56:47 -04:00
{
m_consumer->onEvent(originObject, eventName, std::move(callback));
2025-09-30 14:56:47 -04:00
}
void LogosAPIClient::onEventResponse(LogosObject* object, const QString& eventName, const QVariantList& data)
2025-09-30 14:56:47 -04:00
{
qDebug() << "[LogosObject] LogosAPIClient::onEventResponse" << eventName << "-> LogosObject::emitEvent";
2025-09-30 14:56:47 -04:00
if (eventName.isEmpty()) {
qWarning() << "LogosAPIClient: Event name cannot be empty";
return;
}
if (!object) {
qWarning() << "LogosAPIClient: Cannot emit event on null object";
return;
}
2025-09-30 14:56:47 -04:00
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));
}
2025-09-30 14:56:47 -04:00
bool LogosAPIClient::informModuleToken(const QString& authToken, const QString& moduleName, const QString& token)
{
return m_consumer->informModuleToken(authToken, moduleName, 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;
2025-09-30 14:56:47 -04:00
QString token = m_token_manager->getToken(module_name);
if (!token.isEmpty()) {
qDebug() << "LogosAPIClient: Found token for module:" << module_name;
return token;
}
2025-09-30 14:56:47 -04:00
qDebug() << "LogosAPIClient: No token found for module:" << module_name;
2025-09-30 14:56:47 -04:00
return "";
}