#include "MQTTAgent.h" #include #include /* class ForReason_MustDoThis : public QObject { Q_OBJECT public: ForReason_MustDoThis() :QObject(){ }; public slots: }; ForReason_MustDoThis g_objMust; */ QMQTT::Client* g_pMqtt; MQTTAgent::MQTTAgent() : QObject() { g_pMqtt = nullptr; //g_pThis = this; //shareCbFunc = std::bind(&MQTTAgent::SubCB,this,std::placeholders::_1,std::placeholders::_2); g_pMqtt = new QMQTT::Client(); connect(g_pMqtt, &QMQTT::Client::connected, []{ qDebug()<< __FILE__ << __LINE__ << QDateTime::currentDateTime().toString("hh:mm:ss.zzz") << "connected"; }); connect(g_pMqtt, &QMQTT::Client::disconnected, []{ qDebug()<< __FILE__ << __LINE__ << QDateTime::currentDateTime().toString("hh:mm:ss.zzz") << "disconnect"; }); bool b = connect(g_pMqtt, &QMQTT::Client::received, this, &MQTTAgent::onReceived); //bool b = connect(g_pMqtt, SIGNAL(QMQTT::Client::received), this, SLOT(onReceived)); qDebug() << b; } MQTTAgent::~MQTTAgent() { if( g_pMqtt != nullptr ) { g_pMqtt->disconnected(); g_pMqtt->deleteLater(); } } void MQTTAgent::onReceived(const QMQTT::Message& message) { qDebug() << ":onReceived"; int x = 0; // emit sigEvent((char*)message.topic().toLocal8Bit().toStdString().c_str(), (char*)message.payload().toStdString().c_str()); } bool MQTTAgent::Connect(tagSetup ts) { g_pMqtt->setHostName(ts.addr.c_str()); //g_pMqtt->setHostName("mq.tongxinmao.com"); //18830 //g_pMqtt->setHostName("www.kjxry.cn"); g_pMqtt->setPort(ts.port); g_pMqtt->setKeepAlive(60); g_pMqtt->setClientId("C002");//QUuid::createUuid().toString()); //唯一id, 相同id不能同时连接 g_pMqtt->setUsername(ts.user.c_str()); QString pwd = ts.password.c_str(); g_pMqtt->setPassword(pwd.toUtf8()); g_pMqtt->setAutoReconnect(true); //开启自动重连 g_pMqtt->setCleanSession(true); //非持久化连接,上线时,将不再关心之前所有的订阅关系以及离线消息 g_pMqtt->setVersion(QMQTT::V3_1_1); //qDebug()<< __FILE__ << __LINE__<< "ver" << g_pMqtt->version(); g_pMqtt->connectToHost(); return true; } bool MQTTAgent::Subscribe(std::list topics) { std::list::iterator itr; for (itr = topics.begin(); itr != topics.end(); ++itr) { QString topic = itr->c_str(); g_pMqtt->subscribe(topic, 1); } return true; } 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( g_pMqtt != nullptr ) { g_pMqtt->publish(message); //qDebug() << __FILE__ << __LINE__ << szKey.c_str() << " " << v.toString(); } } QStringList MQTTAgent::hvals(QString k) { return QStringList(); }