#include "library.h" #include #include #include class LogosBlockchainModule : public QObject, public LogosBlockchainModuleAPI { Q_OBJECT Q_PLUGIN_METADATA(IID LogosBlockchainModuleInterface_iid FILE "metadata.json") Q_INTERFACES(LogosBlockchainModuleAPI PluginInterface) public: LogosBlockchainModule() : node(nullptr) { } virtual ~LogosBlockchainModule() { if (node != nullptr) { stop(); } } // PluginInterface implementation QString name() const override { return "logos-blockchain-module"; } QString version() const override { return "1.0.0"; } void initLogos(LogosAPI* logosAPIInstance) { logosAPI = logosAPIInstance; // logos = new LogosModules(logosAPI); // generated wrappers aggregator // logos->core_manager.setEventSource(this); // enable trigger() helper } Q_INVOKABLE void start(const QString &config_path) override { if (node != nullptr) { qWarning() << "Node already started"; return; } QByteArray configPathBytes = config_path.toUtf8(); InitializedNomosNodeResult result = start_nomos_node(configPathBytes.constData()); if (!is_ok(&result.error)) { qCritical() << "Failed to start Nomos node. Error code:" << result.error; return; } node = result.value; qInfo() << "Nomos node started successfully"; } Q_INVOKABLE void stop() override { if (node == nullptr) { qWarning() << "Node not running"; return; } OperationStatus status = stop_node(node); if (is_ok(&status)) { qInfo() << "Nomos node stopped successfully"; } else { qCritical() << "Failed to stop Nomos node. Error code:" << status; } node = nullptr; } signals: // Required for event forwarding between modules void eventResponse(const QString &eventName, const QVariantList &data) { } private: NomosNode *node; };