简介
使用Qt官方提供的QMQTT源代码编译为QMQTT模块,来编写简单的订阅者和发布者。
注:随后的文章里面会增加怎么实现QMQTT模块的编译和使用。
订阅者
#ifndef SUBSCRIBER_H
#define SUBSCRIBER_H
#include <QObject>
#include <QDebug>
#include <qmqtt.h>
#include <QTimer>
//订阅
class Subscriber : public QMQTT::Client {
Q_OBJECT
public:
explicit Subscriber(const QHostAddress& host,
const quint16 port,
QObject* parent = NULL)
: QMQTT::Client(host, port, parent)
, _qout(stdout) {
connect(this, &Subscriber::connected, this, &Subscriber::onConnected);
connect(this, &Subscriber::subscribed, this, &Subscriber::onSubscribed);
connect(this, &Subscriber::received, this, &Subscriber::onReceived);
}
virtual ~Subscriber() {}
QTextStream _qout;
public slots:
void onConnected() {
qDebug() << "connected" << endl;
subscribe("qmqtt/exampletopic", 0);
}
void onSubscribed(const QString& topic) {
qDebug() << "subscribed " << topic << endl;
}
void onReceived(const QMQTT::Message& message) {
qDebug() << "publish received: \""
<< QString::fromUtf8(message.payload())
<< "\"" << endl;
}
};
#endif // SUBSCRIBER_H
发布者
#ifndef PUBLISHER_H
#define PUBLISHER_H
#include <QObject>
#include <QDebug>
#include <qmqtt.h>
#include <QTimer>
//发布
class Publisher : public QMQTT::Client {
Q_OBJECT
public:
explicit Publisher(const QHostAddress& host,
const quint16 port,
QObject* parent = NULL)
: QMQTT::Client(host, port, parent), _number(0) {
connect(this, &Publisher::connected, this, &Publisher::onConnected);
connect(&_timer, &QTimer::timeout, this, &Publisher::onTimeout);
connect(this, &Publisher::disconnected, this, &Publisher::onDisconnected);
}
virtual ~Publisher() {}
QTimer _timer;
quint16 _number;
public slots:
void onConnected() {
subscribe("qmqtt/exampletopic", 0);
_timer.start(1000);
}
void onTimeout() {
QMQTT::Message message(_number, "qmqtt/exampletopic",
QString("Number is %1").arg(_number).toUtf8());
publish(message);
_number++;
// if(_number >= 10) {
// _timer.stop();
// disconnectFromHost();
// }
}
void onDisconnected() {}
};
#endif // PUBLISHER_H