MQTTBase.h 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. #ifndef MQTTBase_H
  2. #define MQTTBase_H
  3. #include <QObject>
  4. #include <QMap>
  5. #include <qt5/QtCore/qchar.h>
  6. #include "qmqtt.h"
  7. /**
  8. * 使用说明:
  9. * 1. 子类可以继承这个类,重新实现 recvMessage 函数,这个函数是接收到消息的回调函数
  10. * 2. 使用SPDLOG日志库,需要注册一个名为“MQTT”的logger
  11. */
  12. class MQTTBase : public QObject
  13. {
  14. Q_OBJECT
  15. public:
  16. MQTTBase(QObject* parent = nullptr);
  17. /* 设置地址 */
  18. void setIPAndPort(const QString& IP, int port = 1883);
  19. /* 设置订阅 */
  20. void addSubcribe(const QString& topic,int qos = 0);
  21. /* 设置自动重连 */
  22. void setAutoReconnect(bool isAuto = true);
  23. /* 连接到服务器 */
  24. void connectToServer();
  25. /* 断开连接 */
  26. void disconnectFromServer() {m_client.disconnectFromHost();}
  27. /* 获取连接状态 */
  28. QMQTT::ConnectionState connectState();
  29. /* 发送消息 */
  30. void sendMessage(const QString& topic, const QByteArray& message, int qos = 0);
  31. /* 发送消息,不检测是否连接了服务器 */
  32. bool sendMessage(const QString& topic, const QByteArray& message, int qos, int& errorCode);
  33. signals:
  34. /* 接收到消息,对消息进行了转发 */
  35. // void signal_recvMessage(const QString& message);
  36. /* 原地转发消息 */
  37. void signal_recvMessage(const QMQTT::Message& message);
  38. protected:
  39. /* 接收到消息,子类继承这个解析消息数据 */
  40. virtual void recvMessage(const QMQTT::Message& message) = 0;
  41. protected slots:
  42. void do_connected(); /* 连接成功 */
  43. void do_disconnect(); /* 断开连接 */
  44. void do_error(const QMQTT::ClientError error); /* 错误 */
  45. void do_subscribed(const QString& topic, const quint8 qos); /* 订阅成功 */
  46. void do_received(const QMQTT::Message& message);/* 接收到消息,子类继承这个解析消息数据 */
  47. protected:
  48. // std::shared_ptr<spdlog::logger> m_logger = nullptr;
  49. bool m_isConnected = false; /* 是否连接成功 */
  50. QString m_mqttIP; /* MQTT服务器IP */
  51. int m_mqttPort; /* MQTT服务器端口 */
  52. QMap<QString, int> m_mapTopic; /* 订阅的主题和QOS */
  53. QMQTT::Client m_client; /* MQTT客户端 */
  54. };
  55. #endif /* MQTTBase_H */