#ifndef MQTTBase_H #define MQTTBase_H #include #include #include "qmqtt.h" #include "spdlog/spdlog.h" /** * 使用说明: * 1. 子类可以继承这个类,重新实现 recvMessage 函数,这个函数是接收到消息的回调函数 * 2. 使用SPDLOG日志库,需要注册一个名为“MQTT”的logger */ class MQTTBase : public QObject { Q_OBJECT public: MQTTBase(QObject* parent = nullptr); void setIPAndPort(const QString& IP, int port = 1883); /* 设置地址 */ void addSubcribe(const QString& topic,int qos = 0); /* 设置订阅 */ void connectToServer(); /* 连接到服务器 */ void analyzeAllMessage(); /* 解析所有消息 */ signals: void signal_recvMessage(const QString& message);/* 接收到消息,对消息进行了转发 */ protected: virtual void recvMessage(const QMQTT::Message& message) = 0; /* 接收到消息,子类继承这个解析消息数据 */ protected slots: void do_connected(); /* 连接成功 */ void do_disconnect(); /* 断开连接 */ void do_error(const QMQTT::ClientError error); /* 错误 */ void do_subscribed(const QString& topic, const quint8 qos); /* 订阅成功 */ void do_received(const QMQTT::Message& message);/* 接收到消息,子类继承这个解析消息数据 */ protected: std::shared_ptr m_logger = nullptr; bool m_isConnected = false; /* 是否连接成功 */ QString m_mqttIP; /* MQTT服务器IP */ int m_mqttPort; /* MQTT服务器端口 */ QMap m_mapTopic; /* 订阅的主题和QOS */ QMQTT::Client m_client; /* MQTT客户端 */ }; #endif /* MQTTBase_H */