diff --git a/src/logos_blockchain_module.cpp b/src/logos_blockchain_module.cpp index cfc54fe..cec962a 100644 --- a/src/logos_blockchain_module.cpp +++ b/src/logos_blockchain_module.cpp @@ -1,7 +1,11 @@ #include "logos_blockchain_module.h" #include +#include +#include #include +#include + LogosBlockchainModule::LogosBlockchainModule() = default; @@ -86,7 +90,11 @@ int LogosBlockchainModule::subscribe() { return 1; } - subscribe_to_new_blocks(node, [](const char* block) { std::cout << "Received new block: " << block << std::endl; }); + subscribe_to_new_blocks(node, [](const char* block) { + std::cout << "Received new block: " << block << std::endl; + auto* event = new BlockEvent(block); + QCoreApplication::postEvent(qApp, event); + }); return 0; } diff --git a/src/logos_blockchain_module.h b/src/logos_blockchain_module.h index 74d0229..30a23ee 100644 --- a/src/logos_blockchain_module.h +++ b/src/logos_blockchain_module.h @@ -2,6 +2,19 @@ #include "i_logos_blockchain_module.h" +class BlockEvent : public QEvent { +public: + static const QEvent::Type BlockEventType = static_cast(QEvent::User + 111); + BlockEvent(const char* blockData) : QEvent(BlockEventType), block(blockData, &free_block) {} + ~BlockEvent() = default; + + std::shared_ptr block; +private: + static void free_block(const char* ptr) { + if (ptr) free_cstring(ptr); + } +}; + class LogosBlockchainModule final : public QObject, public PluginInterface, public ILogosBlockchainModule { Q_OBJECT Q_PLUGIN_METADATA(IID ILogosBlockchainModule_iid FILE LOGOS_BLOCKCHAIN_MODULE_METADATA_FILE)