diff --git a/KelvinDashboardService/DapChainDashboardService.cpp b/KelvinDashboardService/DapChainDashboardService.cpp index ea3a4acf8d27deefa602e5500987a4797e8faa8d..587556644c0eeb14cf031dc7aae2373c5b47fbad 100755 --- a/KelvinDashboardService/DapChainDashboardService.cpp +++ b/KelvinDashboardService/DapChainDashboardService.cpp @@ -66,6 +66,12 @@ QStringList DapChainDashboardService::getWalletInfo(const QString &asWalletName) return m_pDapChainWalletHandler->getWalletInfo(asWalletName); } +QVariant DapChainDashboardService::getNodeNetwork() const +{ + qInfo() << QString("getNodeNetwork"); + return m_pDapChainNodeHandler->getNodeNetwork(); +} + QString DapChainDashboardService::sendToken(const QString &asWalletName, const QString &asReceiverAddr, const QString &asToken, const QString &asAmount) { qInfo() << QString("sendToken(%1;%2;%3;%4)").arg(asWalletName).arg(asReceiverAddr).arg(asToken).arg(asAmount); diff --git a/KelvinDashboardService/DapChainDashboardService.h b/KelvinDashboardService/DapChainDashboardService.h index 626efb736d9c4d6df06a0d0e3842b7ad7d000ec8..8f65ad5d6f5da5478244383e0d45828fd2629a67 100755 --- a/KelvinDashboardService/DapChainDashboardService.h +++ b/KelvinDashboardService/DapChainDashboardService.h @@ -44,7 +44,7 @@ class DapChainDashboardService : public DapRpcService DapChainWalletHandler * m_pDapChainWalletHandler {nullptr}; - DapChainNodeHandler * m_pDapChainNodeHandler {nullptr}; + DapChainNodeNetworkHandler * m_pDapChainNodeHandler {nullptr}; public: /// Standard Ñonstructor. @@ -80,6 +80,7 @@ public slots: QString sendToken(const QString &asWalletName, const QString &asReceiverAddr, const QString &asToken, const QString &asAmount); + QVariant getNodeNetwork() const; }; #endif // DAPCHAINDASHBOARDSERVICE_H diff --git a/KelvinDashboardService/DapChainNodeNetworkHandler.cpp b/KelvinDashboardService/DapChainNodeNetworkHandler.cpp new file mode 100644 index 0000000000000000000000000000000000000000..fc7766889c61b785dee5bac5649dbea8236d806a --- /dev/null +++ b/KelvinDashboardService/DapChainNodeNetworkHandler.cpp @@ -0,0 +1,50 @@ +#include "DapChainNodeNetworkHandler.h" + +DapChainNodeNetworkHandler::DapChainNodeNetworkHandler(QObject *parent) : QObject(parent) +{ + +} + +QVariant DapChainNodeNetworkHandler::getNodeNetwork() const +{ + QProcess process; + process.start(QString(CLI_PATH) + " node dump -net kelvin-testnet -full"); + + process.waitForFinished(-1); + QByteArray result = process.readAll(); + + QMap<QString, QVariant> nodeMap; + if(!result.isEmpty()) + { + QStringList nodes = QString::fromStdString(result.toStdString()).split("node "); + for(int m = 1; m < nodes.count(); m++) + { + QString node = nodes.at(m); + QStringList nodeData; + QRegExp rx_node("address ((?:[0-9A-F]{4}::){3}[0-9A-F]{4})\\s+\n" + "cell (0[xX][0-9A-F]{16})((?:\\d{1,3}\\.){3}\\d{1,3})\\s+\n" + "ipv4 ::\\s+\n" + "ipv6\\s+\n" + "alias (\\S+)\\s+\n" + "links (\\d+)\\s+\n"); + + rx_node.indexIn(node, 0); + for(int i = 2; i < 6; i++) nodeData << rx_node.cap(i); + + if(nodeData.last().toUInt() > 0) + { + QRegExp rx_links("link\\d+ address : ((?:[0-9A-F]{4}::){3}[0-9A-F]{4})"); + int pos = 0; + while ((pos = rx_links.indexIn(node, pos)) != -1) + { + nodeData << rx_links.cap(1); + pos += rx_links.matchedLength(); + } + } + + nodeMap[rx_node.cap(1)] = nodeData; + } + } + + return nodeMap; +} diff --git a/KelvinDashboardService/DapChainNodeNetworkHandler.h b/KelvinDashboardService/DapChainNodeNetworkHandler.h new file mode 100644 index 0000000000000000000000000000000000000000..8e51450ff22fcc1da5f27cb085453446c2732d8e --- /dev/null +++ b/KelvinDashboardService/DapChainNodeNetworkHandler.h @@ -0,0 +1,21 @@ +#ifndef DAPCHAINNODENETWORKHANDLER_H +#define DAPCHAINNODENETWORKHANDLER_H + +#include <QObject> +#include <QProcess> +#include <QRegExp> +#include <QDebug> +//#include "DapNetworkType.h" + +class DapChainNodeNetworkHandler : public QObject +{ + Q_OBJECT + +public: + explicit DapChainNodeNetworkHandler(QObject *parent = nullptr); + +public slots: + QVariant getNodeNetwork() const; +}; + +#endif // DAPCHAINNODENETWORKHANDLER_H diff --git a/KelvinDashboardService/KelvinDashboardService.pro b/KelvinDashboardService/KelvinDashboardService.pro index fa11a6d2fc0533ee20066d4c73457ea8e1883f69..38acef3dafb61d65d3fae1dd722b751402433904 100755 --- a/KelvinDashboardService/KelvinDashboardService.pro +++ b/KelvinDashboardService/KelvinDashboardService.pro @@ -39,13 +39,13 @@ DEFINES += QT_DEPRECATED_WARNINGS #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 SOURCES += \ + DapChainNodeNetworkHandler.cpp \ main.cpp \ DapChainDashboardService.cpp \ DapChainNode.cpp \ DapChainNodeCache.cpp \ DapChainWalletHandler.cpp \ - DapChainLogHandler.cpp \ - DapChainNodeHandler.cpp + DapChainLogHandler.cpp HEADERS += \ DapChainDashboardService.h \