#ifndef FROMMQTT_H
#define FROMMQTT_H

#include <QObject>
#include <QQueue>

#include "qmqtt.h"
#include "spdlog/spdlog.h"

class FromMQTT : public QObject
{
    Q_OBJECT
public:
    FromMQTT(QObject* parent = nullptr);

    void setHostName(const QString& hostName);      /* 设置地址 */
    void setSubcribe(const QString& topic,int qos = 0);/* 设置订阅 */
    void connectToServer();                         /* 连接到服务器 */
    void analyzeAllMessage();                       /* 解析所有消息 */

private:
    void analyzeOneMessage();                       /* 解析消息数据 */

private 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);/* 接收到消息 */


private:
    std::shared_ptr<spdlog::logger> m_logger = nullptr;

    QMQTT::Client m_client;                         /* MQTT客户端 */
    QQueue<QByteArray> m_queueMessage;              /* 消息列表 */
};


#endif /* FROMMQTT_H */