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