Files
logos-cpp-sdk/cpp/logos_api_provider.h

75 lines
2.1 KiB
C++
Raw Permalink Normal View History

2025-09-30 14:56:47 -04:00
#ifndef LOGOS_API_PROVIDER_H
#define LOGOS_API_PROVIDER_H
#include <QObject>
#include <QString>
#include <QVariant>
#include <QVariantList>
#include <QMap>
#include <memory>
#include <string>
2025-09-30 14:56:47 -04:00
class LogosTransportHost;
class LogosObject;
2025-09-30 14:56:47 -04:00
class ModuleProxy;
class LogosProviderObject;
class QtProviderObject;
2025-09-30 14:56:47 -04:00
/**
* @brief LogosAPIProvider handles registering objects for access by consumers
2025-09-30 14:56:47 -04:00
*
* Supports two registration paths:
* 1. registerObject(name, QObject*) — wraps in QtProviderObject, then ModuleProxy
* 2. registerObject(name, LogosProviderObject*) — wraps directly in ModuleProxy
* Both paths converge at ModuleProxy -> transport.
2025-09-30 14:56:47 -04:00
*/
class LogosAPIProvider : public QObject
{
Q_OBJECT
public:
explicit LogosAPIProvider(const QString& module_name, QObject *parent = nullptr);
~LogosAPIProvider();
/**
* @brief Register a legacy QObject-based plugin.
* Wraps in QtProviderObject, then ModuleProxy.
2025-09-30 14:56:47 -04:00
*/
bool registerObject(const QString& name, QObject* object);
/**
* @brief Register a legacy QObject-based plugin — const char* overload (resolves ambiguity)
*/
bool registerObject(const char* name, QObject* object)
{ return registerObject(QString(name), object); }
/**
* @brief Register a legacy QObject-based plugin (std::string overload).
*/
bool registerObject(const std::string& name, QObject* object);
2025-09-30 14:56:47 -04:00
/**
* @brief Register a new-API LogosProviderObject plugin.
* Wraps directly in ModuleProxy.
2025-09-30 14:56:47 -04:00
*/
bool registerObject(const QString& name, LogosProviderObject* provider);
2025-09-30 14:56:47 -04:00
QString registryUrl() const;
2025-09-30 14:56:47 -04:00
bool saveToken(const QString& from_module_name, const QString& token);
public slots:
void onEventResponse(LogosObject* object, const QString& eventName, const QVariantList& data);
2025-09-30 14:56:47 -04:00
private:
bool publishProvider(const QString& name, LogosProviderObject* provider);
std::unique_ptr<LogosTransportHost> m_transport;
2025-09-30 14:56:47 -04:00
QString m_registryUrl;
QMap<QString, QString> m_tokens;
ModuleProxy* m_moduleProxy;
QtProviderObject* m_qtProviderObject;
QString m_registeredObjectName;
2025-09-30 14:56:47 -04:00
};
#endif // LOGOS_API_PROVIDER_H