123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- #include "MQTTAgent.h"
- #include <qmqtt.h>
- #include <QtCore/QUuid>
- /*
- 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<std::string> topics)
- {
- std::list<std::string>::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();
- }
|