mirror of
https://github.com/logos-blockchain/logos-blockchain-module.git
synced 2026-02-20 04:53:10 +00:00
chore(cleanup): Use class static instead of global (#7)
* Use class static instead of global * Fix comments
This commit is contained in:
parent
986d3213ff
commit
5f7d85f168
@ -2,14 +2,30 @@
|
||||
#include "logos_api_client.h"
|
||||
#include <QVariant>
|
||||
|
||||
// This is a static variable that is used to store the module instance.
|
||||
// It is used to access the module instance from subscribe_to_new_blocks callback.
|
||||
static LogosBlockchainModule* s_moduleForCallback = nullptr;
|
||||
// Define static member
|
||||
LogosBlockchainModule* LogosBlockchainModule::s_instance = nullptr;
|
||||
|
||||
LogosBlockchainModule::LogosBlockchainModule() = default;
|
||||
void LogosBlockchainModule::onNewBlockCallback(const char* block) {
|
||||
if (s_instance) {
|
||||
qInfo() << "Received new block: " << block;
|
||||
QVariantList data;
|
||||
data.append(QString::fromUtf8(block));
|
||||
s_instance->emitEvent("newBlock", data);
|
||||
free_cstring(const_cast<char*>(block)); // Free Rust-allocated memory
|
||||
}
|
||||
}
|
||||
|
||||
LogosBlockchainModule::LogosBlockchainModule() {
|
||||
client = logosAPI->getClient("liblogos-blockchain-module");
|
||||
node = nullptr;
|
||||
if (!client) {
|
||||
qWarning() << "LogosBlockchainModule: Failed to get liblogos-blockchain-module client for liblogos-blockchain-module";
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
LogosBlockchainModule::~LogosBlockchainModule() {
|
||||
s_moduleForCallback = nullptr;
|
||||
s_instance = nullptr;
|
||||
if (node) {
|
||||
stop();
|
||||
}
|
||||
@ -71,19 +87,8 @@ int LogosBlockchainModule::start(const QString& config_path, const QString& depl
|
||||
return 1;
|
||||
}
|
||||
|
||||
s_moduleForCallback = this;
|
||||
subscribe_to_new_blocks(node, [](const char* block) {
|
||||
std::cout << "Received new block: " << block << std::endl;
|
||||
if (!s_moduleForCallback) {
|
||||
qCritical() << "s_moduleForCallback is nullptr cant forward the event.";
|
||||
free_cstring(const_cast<char*>(block)); // Free Rust-allocated memory
|
||||
return;
|
||||
}
|
||||
QVariantList data;
|
||||
data.append(QString::fromUtf8(block));
|
||||
s_moduleForCallback->emitEvent("newBlock", data);
|
||||
free_cstring(const_cast<char*>(block)); // Free Rust-allocated memory
|
||||
});
|
||||
s_instance = this;
|
||||
subscribe_to_new_blocks(node, onNewBlockCallback);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -94,6 +99,8 @@ int LogosBlockchainModule::stop() {
|
||||
return 1;
|
||||
}
|
||||
|
||||
s_instance = nullptr; // Clear before stopping to prevent callbacks during shutdown
|
||||
|
||||
const OperationStatus status = stop_node(node);
|
||||
if (is_ok(&status)) {
|
||||
qInfo() << "The node was stopped successfully.";
|
||||
@ -149,12 +156,9 @@ void LogosBlockchainModule::emitEvent(const QString& eventName, const QVariantLi
|
||||
qWarning() << "LogosBlockchainModule: LogosAPI not available, cannot emit" << eventName;
|
||||
return;
|
||||
}
|
||||
|
||||
LogosAPIClient* client = logosAPI->getClient("liblogos-blockchain-module");
|
||||
if (!client) {
|
||||
qWarning() << "LogosBlockchainModule: Failed to get liblogos-blockchain-module client for event" << eventName;
|
||||
return;
|
||||
}
|
||||
|
||||
client->onEventResponse(this, eventName, data);
|
||||
}
|
||||
|
||||
@ -28,6 +28,13 @@ signals:
|
||||
|
||||
private:
|
||||
LogosBlockchainNode* node = nullptr;
|
||||
LogosAPIClient* client = nullptr;
|
||||
|
||||
// Static instance for C callback (C API doesn't support user data)
|
||||
static LogosBlockchainModule* s_instance;
|
||||
|
||||
// C-compatible callback function
|
||||
static void onNewBlockCallback(const char* block);
|
||||
|
||||
// Helper method for emitting events
|
||||
void emitEvent(const QString& eventName, const QVariantList& data);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user