123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- #include "MQTTAgent.h"
- #include <QMqtt.h>
- #include <QtCore/QUuid>
- MQTTAgent* g_pThis;
- QMQTT::Client* m_pMqtt;
- MQTTAgent::MQTTAgent()
- : QObject()
- {
- m_pMqtt = nullptr;
- g_pThis = this;
- }
- MQTTAgent::~MQTTAgent()
- {
- if( m_pMqtt != nullptr )
- {
- delete m_pMqtt;
- }
- }
- void onReceived(const QMQTT::Message& message)
- {
- emit g_pThis->sigEvent((char*)message.topic().toLocal8Bit().toStdString().c_str(), (char*)message.payload().toStdString().c_str());
- //qDebug() << "recv" << message.topic() << message.payload();
- }
- bool MQTTAgent::Connect(tagSetup ts)
- {
- m_pMqtt = new QMQTT::Client();
- connect(m_pMqtt, &QMQTT::Client::connected, []{
- qDebug()<< __FILE__ << __LINE__ << QDateTime::currentDateTime().toString("hh:mm:ss.zzz") << "connected";
- });
- connect(m_pMqtt, &QMQTT::Client::disconnected, []{
- qDebug()<< __FILE__ << __LINE__ << QDateTime::currentDateTime().toString("hh:mm:ss.zzz") << "disconnect";
- });
- connect(m_pMqtt, &QMQTT::Client::received, this, &onReceived);
- m_pMqtt->setHostName(ts.addr.c_str());
- //m_pMqtt->setHostName("mq.tongxinmao.com"); //18830
- //m_pMqtt->setHostName("www.kjxry.cn");
- m_pMqtt->setPort(ts.port);
- m_pMqtt->setKeepAlive(60);
- m_pMqtt->setClientId(QUuid::createUuid().toString()); //唯一id, 相同id不能同时连接
- m_pMqtt->setUsername(ts.user.c_str());
- m_pMqtt->setPassword(ts.password.c_str());
- m_pMqtt->setAutoReconnect(true); //开启自动重连
- m_pMqtt->setCleanSession(true); //非持久化连接,上线时,将不再关心之前所有的订阅关系以及离线消息
- m_pMqtt->setVersion(QMQTT::V3_1_1);
- //qDebug()<< __FILE__ << __LINE__<< "ver" << m_pMqtt->version();
- m_pMqtt->connectToHost();
- return true;
- }
- bool MQTTAgent::Subscribe(std::list<std::string> topics)
- {
- bool ret = true;
- std::list<std::string>::iterator itr;
- for (itr = topics.begin(); itr != topics.end(); ++itr)
- {
- m_pMqtt->subscribe(itr->c_str(), 1);
- }
- return ret;
- }
- void MQTTAgent::Publish(std::string szKey,QVariant v)
- {
- /* std::string szContent;
- switch( v.type() )
- {
- case QMetaType::Bool:
- szContent = v.toBool() ? "true":"false";
- break;
- case QMetaType::Int:
- szContent = std::to_string(v.toInt());
- break;
- case QMetaType::UInt:
- szContent = std::to_string(v.toUInt());
- break;
- case QMetaType::LongLong:
- szContent = std::to_string(v.toLongLong());
- break;
- case QMetaType::ULongLong:
- szContent = std::to_string(v.toULongLong());
- break;
- case QMetaType::Double:
- szContent = std::to_string(v.toDouble());
- break;
- case QMetaType::QString:
- szContent = v.toString().toLocal8Bit().toStdString();
- break;
- }
- */
- QMQTT::Message message;
- message.setTopic(szKey.c_str());
- message.setPayload(v.toByteArray());
- message.setRetain(true); //保留最后一条数据
- if( m_pMqtt != nullptr )
- {
- m_pMqtt->publish(message);
- //qDebug() << __FILE__ << __LINE__ << szKey.c_str() << " " << v.toString();
- }
- }
- QStringList MQTTAgent::hvals(QString k)
- {
- return QStringList();
- }
|