Browse Source

refactor mqtt usage to fix crash problem

Yao 1 month ago
parent
commit
6c797fdc60

+ 0 - 5
CMakeLists.txt

@@ -135,23 +135,18 @@ add_executable(${PROJECT_NAME}
     ${RESOURCES}
     des3encryption.h des3encryption.cpp
     countdownwidget.h countdownwidget.cpp
-    mqttthread.cpp mqttthread.h
     serial/serialtool.h serial/serialtool.cpp
     serial/serialgps.h serial/serialgps.cpp
     paregnrmc.cpp paregnrmc.h
     serialgpsthread.h serialgpsthread.cpp
     worker/timeupdatethread.h worker/timeupdatethread.cpp
     logo.rc
-
     logger.h
     logger.cpp
     loadingWidget.h
     loadingWidget.cpp
     README.md
     backendapimanager.h backendapimanager.cpp
-
-
-
 )
 
 

+ 1 - 3
blastProject/blastprojectpage.cpp

@@ -28,8 +28,6 @@ BlastProjectPage::BlastProjectPage(QWidget *parent)
     personOptionsByType(sysUsersObj);
     connect(dialog, &ProjectDialog::validateDetNum, this, &BlastProjectPage::insertPlan);
     connect(dialog, &ProjectDialog::validateDetNumUpdate, this, &BlastProjectPage::updateProject);
-
-    mqttClient = MqttClient::getInstance();
 }
 
 void BlastProjectPage::RefreshData() { loadDataFromSource(currentPage, pageSize); }
@@ -233,7 +231,7 @@ void BlastProjectPage::publishAllPendingBlastProjects() {
     QJsonDocument jsonDoc(jsonArray);
     QByteArray jsonData = jsonDoc.toJson(QJsonDocument::Indented);
 
-    mqttClient->sendMessage("hxgc/companycode/pro/B", jsonData, 2, true);
+    mainMqttClient->sendMessage(MQTT_TOPIC_COMPANY_PROJECTS, jsonData, 2, true);
 };
 
 void BlastProjectPage::updateButtonClicked(const HProject &project) {

+ 0 - 2
blastProject/blastprojectpage.h

@@ -50,11 +50,9 @@ class BlastProjectPage : public QWidget {
     PageWidget *pageWidget;
     ProjectDialog *dialog;
     HttpClient *m_httpClient;
-    MqttClient *pcBC;
     HProjectDao dao;
     QJsonArray dataArray;
     QJsonArray dataArrayAddress;
-    MqttClient *mqttClient;
     int pageSize;     // 每页显示的记录数量
     int currentPage;  // 当前页面
     int totalCount;

+ 20 - 31
fireWidget/firingwidget.cpp

@@ -43,51 +43,44 @@ firingWidget::firingWidget(const int &row, const bool &select, const QString &uu
     ui->verticalLayout->setContentsMargins(0, 30, 0, 0);
     ui->scrollArea->setStyleSheet("background: rgba(0, 0, 0, 22); border-radius: 20px;");
     ui->verticalLayout->addWidget(navProgress);
-    mqttThread = new MqttThread(this);
     m_topic = "hxgc/" + uuid + "/B";
     QStringList topics = {m_topic};
     m_connectionCheckTimer = new QTimer(this);
-    mqttThread->setConnectionInfo("114.55.233.194", 1883, "hxgc", "hxgc123456", "aP" + uuid, topics);
-    connect(mqttThread, &MqttThread::mqttConnected, this, &firingWidget::onMqttConnected);
-    connect(mqttThread, &MqttThread::mqttDisconnected, this, &firingWidget::onMqttDisconnected);
-    mqttThread->start();
-    connect(mqttThread, &MqttThread::projectMqttMessageReceived, this, &firingWidget::handleProjectFiringMqttMessage);
+
+    m_subscription = mainMqttClient->subscribeToTopic(m_topic);
+    connect(m_subscription, &QMqttSubscription::messageReceived, this, &firingWidget::handleProjectFiringMqttMessage);
+
     connect(this, &firingWidget::lastStageChanged, this, &firingWidget::handleFiringStageChanged);
     connect(this, &firingWidget::updateData, this, &firingWidget::onBlastSuccess);
 }
 
 firingWidget::~firingWidget() {
-    m_connectionCheckTimer->deleteLater();
-    mqttThread->stopThread();
-    mqttThread->wait();
-    qDebug() << "firingWidget::~firingWidget()";
+    m_subscription->unsubscribe();
     delete ui;
 }
 
 void firingWidget::sendMqttMessage(const QString &topic, const QByteArray &message) {
-    if (mqttThread && m_isMqttConnected) {
-        emit mqttThread->sendMessageRequested(topic, message, quint8(2), false);
+    if (mainMqttClient->isConnected()) {
+        mainMqttClient->sendMessage(topic, message, quint8(2), false);
     } else {
-        QMessageBox::warning(this, "MQTT未连接", "MQTT未连接, 无法发送消息: " + topic + ", " + message);
+        QMessageBox::warning(nullptr, "MQTT未连接", "MQTT未连接, 无法发送消息: " + topic + ", " + message);
         Logger::getInstance().error("MQTT未连接, 无法发送消息" + topic + ", " + message);
     }
 }
 
 void firingWidget::startBlasting() {
-    checkBlasterConnection();
     // 等待3s mqtt连接后再发送mqtt消息
-    QTimer::singleShot(3000, this, [this]() {
-        m_lastStage = FiringStages::Starting;
-        emit lastStageChanged(FiringStages::Starting);
-    });
+    m_lastStage = FiringStages::Starting;
+    emit lastStageChanged(FiringStages::Starting);
+    checkBlasterConnection();
 }
 
 // 定间隔检查有没有收到爆破器返回信息
 void firingWidget::checkBlasterConnection() {
     m_lastMsgTime = QDateTime::currentDateTime();
-    connect(mqttThread, &MqttThread::projectMqttMessageReceived, this,
-            [&]() { m_lastMsgTime = QDateTime::currentDateTime(); });
 
+    connect(m_subscription, &QMqttSubscription::messageReceived, this,
+            [&]() { m_lastMsgTime = QDateTime::currentDateTime(); });
     connect(m_connectionCheckTimer, &QTimer::timeout, this, [this]() {
         if (m_lastStage == FiringStages::CancelConfirmed || m_lastStage == FiringStages::BlastFinished) {
             return;
@@ -186,16 +179,14 @@ bool firingWidget::uploadToDanLing(const QJsonObject &jsonObj) {
     return true;
 }
 
-void firingWidget::handleProjectFiringMqttMessage(const QByteArray &message, const QMqttTopicName &topic) {
-    QString msgText = QString("Topic: %1, Message: %2").arg(topic.name(), QString(message));
+void firingWidget::handleProjectFiringMqttMessage(const QMqttMessage &message) {
+    QString msgText = QString("Topic: %1, Message: %2").arg(message.topic().name(), QString(message.payload()));
     QTextEdit *textEdit = ui->scrollAreaWidgetContents->findChild<QTextEdit *>("textEdit");
     if (textEdit) {
         textEdit->append(msgText);
     }
-    qDebug() << ANSI_COLOR_GREEN << "Received message on topic:" << topic.name() << ", Message:" << QString(message)
-             << ANSI_COLOR_RESET;
     int stage = 0;
-    QJsonDocument jsonDoc = QJsonDocument::fromJson(message);
+    QJsonDocument jsonDoc = QJsonDocument::fromJson(message.payload());
     if (!jsonDoc.isNull() && jsonDoc.isObject()) {
         QJsonObject jsonObj = jsonDoc.object();
 
@@ -320,14 +311,12 @@ void firingWidget::onCountdownFinished(const QString &topic, const QString &mess
     sendMqttMessage(topic, message.toUtf8());
 }
 
-void firingWidget::onMqttConnected() {
-    Logger::getInstance().info(QString("Project(%1) firing MQTT connected successfully.").arg(m_curProjUuid));
-    m_isMqttConnected = true;
-}
-
 void firingWidget::onMqttDisconnected() {
     Logger::getInstance().info(QString("Project(%1) firing MQTT disconncted.").arg(m_curProjUuid));
-    m_isMqttConnected = false;
+}
+
+void firingWidget::onMqttConnected() {
+    Logger::getInstance().info(QString("Project(%1) firing MQTT connected.").arg(m_curProjUuid));
 }
 
 void firingWidget::onButtonPressedReceived(const QString &topic, const QString &message) {

+ 6 - 5
fireWidget/firingwidget.h

@@ -1,7 +1,9 @@
 #ifndef FIRINGWIDGET_H
 #define FIRINGWIDGET_H
+
 #include <QJsonDocument>
 #include <QJsonObject>
+#include <QMqttSubscription>
 #include <QWidget>
 
 #include "../backendapimanager.h"
@@ -13,7 +15,6 @@
 #include "../des3encryption.h"
 #include "../logger.h"
 #include "../mqtt/mqttclient.h"
-#include "../mqttthread.h"
 #include "../serial/serialtool.h"
 #include "navprogress.h"
 
@@ -49,7 +50,7 @@ class firingWidget : public QWidget {
    private slots:
     void on_pushButton_2_clicked();
     void on_sendTest_4_clicked();
-    void handleProjectFiringMqttMessage(const QByteArray &message, const QMqttTopicName &topic);
+    void handleProjectFiringMqttMessage(const QMqttMessage &qmessage);
 
     void onMqttConnected();
     void onMqttDisconnected();
@@ -71,6 +72,7 @@ class firingWidget : public QWidget {
     void closeFiring(QString uuid);
 
    private:
+    void checkBlasterConnection();
     void uploadBlastRecordToServer(HBlastRecord *blastRecord);
     HBlastRecord *recordBlastProject(const QJsonObject &jsonObj);
     HBlastEquipmentRecord *recordBlastEquipment(const QString blastProjectUUID, const QJsonObject &regObj);
@@ -80,7 +82,6 @@ class firingWidget : public QWidget {
     void saveAndUploadRecord(const QJsonObject &jsonObj);
     void sendMqttMessage(const QString &topic, const QByteArray &message);
     void onSafeChecked(const QString projectUuid);
-    void checkBlasterConnection();
 
    private:
     Ui::firingWidget *ui;
@@ -89,13 +90,11 @@ class firingWidget : public QWidget {
     HBlastRecordDetDao daoDet;
     HBlastRegRecordDao daoReg;
     NavProgress *navProgress;
-    MqttThread *mqttThread;
     SerialTool *serialTool = nullptr;
     QString m_curProjUuid;
     QString m_topic;  // firingwidget对应的 MQTT 主题
     int m_row;
     int m_lastStage = -1;  // 用于记录上一次的 stage 状态
-    bool m_isMqttConnected = false;
     bool m_select;
     QMetaObject::Connection connection;  // 声明 connection 变量
     QMetaObject::Connection connectionPress;
@@ -103,6 +102,8 @@ class firingWidget : public QWidget {
     QString m_longitude;
     QDateTime m_lastMsgTime;
     QTimer *m_connectionCheckTimer;
+    QMqttSubscription *m_subscription;  // 用于订阅 MQTT 消息
+    bool m_isDestroying = false;        // Flag to prevent operations during destruction
 };
 
 #endif  // FIRINGWIDGET_H

+ 2 - 1
global.cpp

@@ -43,4 +43,5 @@ void loadConfig() {
              << DET_PARAM_SBBH;
 }
 
-QMutex globalMutex;  // 全局操作锁
+QMutex globalMutex;                    // 全局操作锁
+MqttClient* mainMqttClient = nullptr;  // 定义全局 MQTT 客户端

+ 3 - 0
global.h

@@ -6,6 +6,9 @@
 #include <QUrlQuery>
 
 #include "logger.h"
+#include "mqtt/mqttclient.h"
+
+extern MqttClient* mainMqttClient;
 
 /* global variables which can configured in config file */
 extern QUrl apiBackendUrl;                   // 声明全局变量

+ 17 - 1
main.cpp

@@ -9,8 +9,9 @@
 #include "logger.h"
 #include "loginwindow.h"
 #include "mainwindow.h"
+#include "mqtt/mqttclient.h"
 
-int main(int argc, char *argv[]) {
+int main(int argc, char* argv[]) {
     QApplication app(argc, argv);
 
     QQuickWindow::setSceneGraphBackend("software");  // 兼容性: 禁用GPU
@@ -34,6 +35,21 @@ int main(int argc, char *argv[]) {
     loadConfig();
     backendAPIManager::initialize(apiBackendUrl.toString());
 
+    // Initialize MQTT client with proper error handling
+    try {
+        mainMqttClient = new MqttClient();
+        if (mainMqttClient != nullptr) {
+            mainMqttClient->connectToMqttBroker("114.55.233.194", 1883, "hxgc", "hxgc123456", mqttClientId);
+            Logger::getInstance().info("MQTT client initialized successfully");
+        } else {
+            Logger::getInstance().error("Failed to create MQTT client instance");
+        }
+    } catch (const std::exception& e) {
+        Logger::getInstance().error(QString("Exception while initializing MQTT client: %1").arg(e.what()));
+    } catch (...) {
+        Logger::getInstance().error("Unknown exception while initializing MQTT client");
+    }
+
     // MainWindow w;
     //  Page w;
     //  pageTest w;

+ 17 - 9
mainwindow.cpp

@@ -12,6 +12,7 @@
 #include "jobs.h"
 #include "loadingWidget.h"
 #include "logger.h"
+#include "mqtt/mqttclient.h"
 #include "ui_mainwindow.h"
 
 // 定义 ANzI 转义序列来设置颜色
@@ -133,18 +134,25 @@ void MainWindow::switchPage(QWidget *button) {
 
 void MainWindow::initialMqttService() {
     Logger::getInstance().info("Start init Mqtt server.");
-    MqttClient *pcMqttInit = MqttClient::getInstance();
-    QStringList topics = {MQTT_TOPIC_COMPANY_PROJECTS};
-    pcMqttInit->connectToMqttBroker("114.55.233.194", 1883, "hxgc", "hxgc123456", mqttClientId, topics);
-    connect(pcMqttInit, &MqttClient::proMessageReceived, this, &MainWindow::handleMqttProjectsMessage);
-    Logger::getInstance().info("Connect Mqtt server request sent.");
+    if (mainMqttClient != nullptr) {
+        QMqttSubscription *projectMsgSubsciber = mainMqttClient->subscribeToTopic(MQTT_TOPIC_COMPANY_PROJECTS);
+        if (projectMsgSubsciber != nullptr) {
+            connect(projectMsgSubsciber, &QMqttSubscription::messageReceived, this, &MainWindow::handleMqttProjectsMessage);
+        } else {
+            Logger::getInstance().error("Failed to subscribe to MQTT topic: " + MQTT_TOPIC_COMPANY_PROJECTS);
+        }
+    } else {
+        Logger::getInstance().error("mainMqttClient is null, cannot initialize MQTT service");
+    }
 }
 
-void MainWindow::handleMqttProjectsMessage(const QByteArray &message, const QMqttTopicName &topic) {
-    Logger::getInstance().info("Received Mqtt message on topic: " + topic.name() +
-                               ", message: " + QString::fromUtf8(message));
-    QJsonDocument jsonDoc = QJsonDocument::fromJson(message);
+void MainWindow::handleMqttProjectsMessage(const QMqttMessage &message) {
+    Logger::getInstance().info("Received Mqtt message on topic: " + message.topic().name() +
+                               ", message: " + QString::fromUtf8(message.payload()));
+
+    QJsonDocument jsonDoc = QJsonDocument::fromJson(message.payload());
     if (!jsonDoc.isNull() && jsonDoc.isObject()) {
+        // 注册工程信息
         QJsonObject jsonObj = jsonDoc.object();
         if (jsonObj.contains("uuid") && jsonObj.contains("status")) {
             QJsonValue uuidValue = jsonObj["uuid"];

+ 1 - 1
mainwindow.h

@@ -47,7 +47,7 @@ class MainWindow : public QMainWindow {
     void updateProjectTitleLabel(const QString &newTitle);
     void handleRefreshPage();
 
-    void handleMqttProjectsMessage(const QByteArray &message, const QMqttTopicName &topic);
+    void handleMqttProjectsMessage(const QMqttMessage &message);
 
    private:
     void initializeAnimate();

+ 28 - 68
mqtt/mqttclient.cpp

@@ -7,63 +7,32 @@
 #include "../global.h"
 #include "../logger.h"
 
-MqttClient *MqttClient::instance = nullptr;
-
-MqttClient::MqttClient(QObject *parent) : QObject(parent), mqClient(new QMqttClient(this)) {
+MqttClient::MqttClient(QObject *parent) : QObject(parent), _mqClient(new QMqttClient(this)) {
     // 连接信号和槽
-    connect(mqClient, &QMqttClient::connected, this, &MqttClient::onConnected);
-    // TODO: connect(mqClient, &QMqttClient::disconnected, this, &MqttClient::onDisconnected);
-    connect(mqClient, &QMqttClient::stateChanged, this, &MqttClient::onStateChanged);
-    connect(mqClient, &QMqttClient::errorChanged, this, &MqttClient::onError);
-    connect(mqClient, &QMqttClient::messageReceived, this, &MqttClient::onMessageReceived);
-    connect(mqClient, &QMqttClient::errorChanged, this, [this](QMqttClient::ClientError error) {
-        Logger::getInstance().error(QString("MQTT client occured error: %1").arg(error));
-    });
-}
-
-// 单例模式
-MqttClient *MqttClient::getInstance() {
-    if (instance == nullptr) {
-        instance = new MqttClient();
-    }
-    return instance;
-}
-
-MqttClient *MqttClient::createNewInstance() { return new MqttClient(); }
-void MqttClient::connectToMqttBroker() {
-    mqClient->setHostname("114.55.233.194");
-    mqClient->setPort(1883);
-    mqClient->setKeepAlive(20);
-
-    // // 设置账号和密码
-    mqClient->setUsername("hxgc");
-    mqClient->setPassword("hxgc123456");
-
-    // 设置客户端 ID
-    mqClient->setClientId("pc");
-    mqClient->connectToHost();
+    connect(_mqClient, &QMqttClient::stateChanged, this, &MqttClient::onStateChanged);
+    connect(_mqClient, &QMqttClient::messageReceived, this, &MqttClient::onMessageReceived);
+    connect(_mqClient, &QMqttClient::errorChanged, this, &MqttClient::onError);
+    connect(_mqClient, &QMqttClient::connected, this, &MqttClient::onConnected);
 }
 
 void MqttClient::connectToMqttBroker(const QString &hostname, quint16 port, const QString &username,
-                                     const QString &password, const QString &clientId,
-                                     const QStringList &topicsToSubscribe) {
-    mqClient->setHostname(hostname);
-    mqClient->setPort(port);
-    mqClient->setKeepAlive(20);
+                                     const QString &password, const QString &clientId) {
+    _mqClient->setHostname(hostname);
+    _mqClient->setPort(port);
+    _mqClient->setKeepAlive(20);
 
     // 设置账号和密码
-    mqClient->setUsername(username);
-    mqClient->setPassword(password);
+    _mqClient->setUsername(username);
+    _mqClient->setPassword(password);
 
     // 设置客户端 ID
-    mqClient->setClientId(clientId);
-    mqClient->connectToHost();
+    _mqClient->setClientId(clientId);
+    _mqClient->connectToHost();
     // 保存要订阅的主题列表
-    m_subscribeTopics = topicsToSubscribe;
+    // m_subscribeTopics = topicsToSubscribe;
 }
 void MqttClient::onConnected() {
     Logger::getInstance().debug("MQTT conncted");
-    m_connectRetryCount = 0;
     subscribeToTopics(m_subscribeTopics);
 }
 
@@ -74,17 +43,19 @@ void MqttClient::subscribeToTopics(const QStringList &topics) {
 }
 
 void MqttClient::disconnectFromMqttBroker() {
-    Logger::getInstance().info("MQTT client disconnecting from broker" + mqClient->state());
-    if (mqClient->state() == QMqttClient::Connected) {
-        mqClient->disconnectFromHost();
+    Logger::getInstance().info("MQTT client disconnecting from broker" + _mqClient->state());
+    if (_mqClient->state() == QMqttClient::Connected) {
+        _mqClient->disconnectFromHost();
     }
 }
 
-void MqttClient::subscribeToTopic(const QString &topic) { mqClient->subscribe(topic); }
+bool MqttClient::isConnected() const { return _mqClient->state() == QMqttClient::Connected; }
+
+QMqttSubscription *MqttClient::subscribeToTopic(const QString &topic) { return _mqClient->subscribe(topic); }
 
 void MqttClient::sendMessage(const QString &topic, const QByteArray &message, quint8 qos, bool isRetainedMsg) {
-    if (mqClient->state() == QMqttClient::Connected) {
-        auto pub = mqClient->publish(QMqttTopicName(topic), message, qos, isRetainedMsg);
+    if (_mqClient->state() == QMqttClient::Connected) {
+        auto pub = _mqClient->publish(QMqttTopicName(topic), message, qos, isRetainedMsg);
         if (pub == -1)
             Logger::getInstance().error(
                 QString("MQTT client sent message to topic: %1, msg: %2, qos: %3, isRetainedMsg: %4")
@@ -111,31 +82,20 @@ void MqttClient::onMessageReceived(const QByteArray &message, const QMqttTopicNa
 void MqttClient::onStateChanged(QMqttClient::ClientState state) {
     switch (state) {
         case QMqttClient::ClientState::Disconnected:
-            m_connectRetryCount++;
-            if (m_connectRetryCount < 3) {
-                Logger::getInstance().info(QString("Mqtt reconnecting... (%1)").arg(m_connectRetryCount));
-                connectToMqttBroker();
-            } else {
-                Logger::getInstance().error("Mqtt reconnect failed after 3 attempts");
-                QMessageBox::warning(nullptr, "提示", "mqtt连接已断开,请重新登录");
-                emit disConnected();
-            }
+            Logger::getInstance().info("mqtt disconnected");
             break;
         case QMqttClient::ClientState::Connecting:
-            qDebug() << "MQTT 客户端状态: 正在连接";
+            Logger::getInstance().info("mqtt connecting");
             break;
         case QMqttClient::ClientState::Connected:
-            m_connectRetryCount = 0;  // 重置连接重试计数
-            qDebug() << "MQTT 客户端状态: 已连接";
-            emit connected();
+            Logger::getInstance().info("mqtt connected");
             break;
         default:
-            Logger::getInstance().info("Mqtt unkown state: " + QString::number(state));
+            Logger::getInstance().info("mqtt other state" + state);
             break;
     }
 }
 
 void MqttClient::onError(QMqttClient::ClientError error) {
-    qDebug() << "MQTT 错误: " << error;
-    Logger::getInstance().error(QString("MQTT client error: %1").arg(error));
-}
+    Logger::getInstance().error(QString("MQTT client error: %1").arg(static_cast<int>(error)));
+}

+ 4 - 7
mqtt/mqttclient.h

@@ -10,17 +10,15 @@ class MqttClient : public QObject {
     Q_OBJECT
 
    public:
-    static MqttClient *getInstance();  // 静态成员函数,用于获取单例实例
-    static MqttClient *createNewInstance();
     explicit MqttClient(QObject *parent = nullptr);
-    void subscribeToTopic(const QString &topic);
+    QMqttSubscription *subscribeToTopic(const QString &topic);
     void sendMessage(const QString &topic, const QByteArray &message, quint8 qos, bool isRetainedMsg);
     void onMessageReceived(const QByteArray &message, const QMqttTopicName &topic);
     void connectToMqttBroker(const QString &hostname, quint16 port, const QString &username, const QString &password,
-                             const QString &clientId, const QStringList &topicsToSubscribe);
+                             const QString &clientId);
     void subscribeToTopics(const QStringList &topics);
     void disconnectFromMqttBroker();
-    void connectToMqttBroker();
+    bool isConnected() const;
    signals:
     void connected();
     void disConnected();
@@ -36,8 +34,7 @@ class MqttClient : public QObject {
 
    private:
     static MqttClient *instance;  // 静态成员变量,用于保存单例实例
-    QMqttClient *mqClient;
+    QMqttClient *_mqClient;
     QStringList m_subscribeTopics;
-    int m_connectRetryCount = 0;  // 连接重试次数
 };
 #endif  // MQTTCLIENT_H

+ 0 - 51
mqttthread.cpp

@@ -1,51 +0,0 @@
-#include "mqttthread.h"
-
-#include "./mqtt/mqttclient.h"
-#include "logger.h"
-
-MqttThread::MqttThread(QObject *parent) : QThread(parent) {}
-
-MqttThread::~MqttThread() { stopThread(); }
-
-void MqttThread::setConnectionInfo(const QString &hostname, quint16 port, const QString &username,
-                                   const QString &password, const QString &clientId,
-                                   const QStringList &topicsToSubscribe) {
-    m_hostname = hostname;
-    m_port = port;
-    m_username = username;
-    m_password = password;
-    m_clientId = clientId;
-    m_topicsToSubscribe = topicsToSubscribe;
-}
-
-MqttClient *MqttThread::getMqttClient() const { return mqttClient; }
-
-void MqttThread::stopThread() {
-    mqttClient->disconnectFromMqttBroker();
-    m_stopFlag = true;
-    Logger::getInstance().info("MqttThread: 停止线程请求已发送");
-    quit();
-    wait(3000);
-}
-
-void MqttThread::run() {
-    // mqttClient = new MqttClient();
-    mqttClient = MqttClient::createNewInstance();
-    mqttClient->connectToMqttBroker(m_hostname, m_port, m_username, m_password, m_clientId, m_topicsToSubscribe);
-
-    connect(mqttClient, &MqttClient::connected, this, &MqttThread::mqttConnected);
-    connect(mqttClient, &MqttClient::disConnected, this, &MqttThread::mqttDisconnected);
-    connect(mqttClient, &MqttClient::messageReceived, this, &MqttThread::projectMqttMessageReceived);
-    connect(this, &MqttThread::sendMessageRequested, mqttClient, &MqttClient::sendMessage);
-    while (!m_stopFlag) {
-        exec();
-    }
-}
-
-void MqttThread::sendMqttMessage(const QString &topic, const QByteArray &message, quint8 qos, bool isRetainedMsg) {
-    if (mqttClient) {
-        Logger::getInstance().info(QString("Mqtt thread 发送MQTT消息到主题: %1, 消息: %2, qos: %3, isRetainMsg: %4")
-                                       .arg(topic, QString(message), qos, isRetainedMsg ? "true" : "false"));
-        mqttClient->sendMessage(topic, message, qos, isRetainedMsg);
-    }
-}

+ 0 - 44
mqttthread.h

@@ -1,44 +0,0 @@
-#ifndef MQTTTHREAD_H
-#define MQTTTHREAD_H
-
-#include <QString>
-#include <QStringList>
-#include <QThread>
-
-#include "./mqtt/mqttclient.h"
-
-class MqttClient;
-
-class MqttThread : public QThread {
-    Q_OBJECT
-   public:
-    MqttThread(QObject *parent = nullptr);
-    ~MqttThread();
-    void stopThread();
-
-    void sendMqttMessage(const QString &topic, const QByteArray &message, quint8 qos, bool isRetainedMsg);
-    void setConnectionInfo(const QString &hostname, quint16 port, const QString &username, const QString &password,
-                           const QString &clientId, const QStringList &topicsToSubscribe);
-    MqttClient *getMqttClient() const;
-
-   signals:
-    void mqttConnected();
-    void mqttDisconnected();
-    // 转发 MQTT 消息接收信号
-    void projectMqttMessageReceived(const QByteArray &message, const QMqttTopicName &topic);
-    void sendMessageRequested(const QString &topic, const QByteArray &message, quint8 qos, bool isRetainedMsg);
-
-   protected:
-    void run() override;
-
-   private:
-    MqttClient *mqttClient = nullptr;
-    QString m_hostname;
-    quint16 m_port;
-    QString m_username;
-    QString m_password;
-    QString m_clientId;
-    QStringList m_topicsToSubscribe;
-    bool m_stopFlag = false;
-};
-#endif  // MQTTTHREAD_H