#ifndef MQTTBase_H #define MQTTBase_H #include #include #include "qmqtt.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 setAutoReconnect(bool isAuto = true); /* 连接到服务器 */ void connectToServer(); /* 发送消息 */ void sendMessage(const QString& topic, const QByteArray& message, int qos = 0); 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 */