From 8ebd6fa6e41c0b335c904f024fadf26764111106 Mon Sep 17 00:00:00 2001 From: "denis.sumin" <denis.smolov@demlabs.net> Date: Thu, 19 Sep 2024 13:14:47 +0300 Subject: [PATCH] [*] add ready read slot and send data logic --- .../DiagDataSendingWorker.cpp | 32 +++++++++++++++++++ CellframeNodeDiagtool/DiagDataSendingWorker.h | 6 +++- CellframeNodeDiagtool/DiagnosticWorker.cpp | 17 ++++++---- 3 files changed, 48 insertions(+), 7 deletions(-) diff --git a/CellframeNodeDiagtool/DiagDataSendingWorker.cpp b/CellframeNodeDiagtool/DiagDataSendingWorker.cpp index 59fba0c..58886be 100644 --- a/CellframeNodeDiagtool/DiagDataSendingWorker.cpp +++ b/CellframeNodeDiagtool/DiagDataSendingWorker.cpp @@ -11,6 +11,7 @@ DiagDataSendingWorker::DiagDataSendingWorker(QTcpServer *parent) Qt::QueuedConnection); startServer(); + f_sendingDataToServer = QSettings().value("send_data_flag", true).toBool(); m_urls = QStringList()<<"https://telemetry.cellframe.net/diag_report"<< "https://engine-minkowski.kelvpn.com/diag_report"; m_netMngr = new QNetworkAccessManager(this); @@ -52,6 +53,11 @@ void DiagDataSendingWorker::onNewConnection() this, &DiagDataSendingWorker::onClientDisconnect, Qt::QueuedConnection); + connect(_socket, &QTcpSocket::readyRead, + this, &DiagDataSendingWorker::onReadyRead, + Qt::QueuedConnection); + + qDebug()<<"Client's count:" << s_tcpSocketList.length(); } @@ -63,6 +69,29 @@ void DiagDataSendingWorker::onClientDisconnect() qDebug()<<"Client's count:" << s_tcpSocketList.length(); } +void DiagDataSendingWorker::onReadyRead() +{ + QTcpSocket* _socket = dynamic_cast<QTcpSocket*>(sender()); + if ( _socket == nullptr || + _socket->state() != QAbstractSocket::ConnectedState) { return; } + + QJsonParseError error; + + QByteArray rcvData = _socket->readAll(); + QJsonDocument encodedJson = QJsonDocument::fromJson(rcvData, &error); + + if(error.error != QJsonParseError::NoError) + return; + + QJsonObject rcvObj = encodedJson.object(); + if(!rcvObj["send_data_flag"].isNull() && rcvObj["send_data_flag"].isBool()) + { + f_sendingDataToServer = rcvObj["send_data_flag"].toBool(); + QSettings().setValue("send_data_flag",f_sendingDataToServer); + } + else + return; +} void DiagDataSendingWorker::sendData(QJsonDocument diagdata, QString mac) { @@ -72,6 +101,9 @@ void DiagDataSendingWorker::sendData(QJsonDocument diagdata, QString mac) client->write(diagdata.toJson()); } + if(!f_sendingDataToServer) + return; + for (const auto &url_s : qAsConst(m_urls)) { QUrl url = QUrl(url_s); diff --git a/CellframeNodeDiagtool/DiagDataSendingWorker.h b/CellframeNodeDiagtool/DiagDataSendingWorker.h index af0d2af..a1dd567 100644 --- a/CellframeNodeDiagtool/DiagDataSendingWorker.h +++ b/CellframeNodeDiagtool/DiagDataSendingWorker.h @@ -7,9 +7,11 @@ #include <QTextCodec> #include <QUrl> #include <QTimer> +#include <QSettings> #include <QJsonDocument> #include <QJsonObject> +#include <QJsonParseError> #include <QNetworkAccessManager> #include <QHttpPart> @@ -28,7 +30,7 @@ private slots: void startServer(); void onNewConnection(); void onClientDisconnect(); - + void onReadyRead(); private: QTimer *s_timer_restart; @@ -37,6 +39,8 @@ private: QStringList m_urls; QNetworkAccessManager *m_netMngr; + bool f_sendingDataToServer{true}; + public: bool serverStatus{false}; diff --git a/CellframeNodeDiagtool/DiagnosticWorker.cpp b/CellframeNodeDiagtool/DiagnosticWorker.cpp index e1c07c9..b427aa7 100644 --- a/CellframeNodeDiagtool/DiagnosticWorker.cpp +++ b/CellframeNodeDiagtool/DiagnosticWorker.cpp @@ -108,15 +108,20 @@ void DiagnosticWorker::slot_diagnostic_data(QJsonDocument data) if(m_node_version.isEmpty()) { QProcess proc; - proc.start(QString(CLI_PATH), QStringList()<<"version"); - proc.waitForFinished(5000); - QString result = proc.readAll(); - if(result.contains("version")) + proc.setProgram(QString(CLI_PATH)); + proc.setArguments(QStringList()<<"version"); + proc.start(); + if(proc.waitForFinished(5000)); { - result = result.split("version")[1]; - m_node_version = result.split('\n', QString::SkipEmptyParts).first().trimmed(); + QString result = proc.readAllStandardOutput(); + if(result.contains("version")) + { + result = result.split("version")[1]; + m_node_version = result.split('\n', QString::SkipEmptyParts).first().trimmed(); + } } + m_notifyWorker->nodeIsOnline(); } -- GitLab