MainWindow::MainWindow(QMQTT::Client *client, QWidget *parent) : QMainWindow(parent), _client(client), ui(new Ui::MainWindow) { ui->setupUi(this); ui->conForm->init(client); ui->pubForm->init(client); ui->subForm->init(client); //add pushBtuoon slots connect(ui->pushButtonConnect,SIGNAL(clicked(bool)),this,SLOT(connectServer())); connect(ui->pushButtonPusblish,SIGNAL(clicked(bool)),this,SLOT(publishTopic())); connect(ui->pushButtonSubscribe,SIGNAL(clicked(bool)),this,SLOT(subscribeTopic())); connect(ui->pushButtonQuit,SIGNAL(clicked(bool)),this,SLOT(quitApp())); connect(ui->pushButtonClear,SIGNAL(clicked(bool)),this,SLOT(clearMsg())); connect(ui->pushButtonAbout,SIGNAL(clicked(bool)),this,SLOT(aboutApp())); //connform slots connect(_client, SIGNAL(disconnected()), ui->conForm, SLOT(updateUiStatus())); connect(_client, SIGNAL(connected()), ui->conForm, SLOT(updateUiStatus())); //mainwindow slots connect(_client, SIGNAL(connected()), this, SLOT(onMQTT_Connected())); connect(_client, SIGNAL(connacked(quint8)), this, SLOT(onMQTT_Connacked(quint8))); connect(_client, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(onMQTT_error(QAbstractSocket::SocketError))); connect(_client, SIGNAL(published(QMQTT::Message &)), this, SLOT(onMQTT_Published(QMQTT::Message &))); connect(_client, SIGNAL(pubacked(quint8, quint16)), this, SLOT(onMQTT_Pubacked(quint8, quint16))); connect(_client, SIGNAL(received(const QMQTT::Message &)), this, SLOT(onMQTT_Received(const QMQTT::Message &))); connect(_client, SIGNAL(subscribed(const QString &)), this, SLOT(onMQTT_subscribed(const QString &))); connect(_client, SIGNAL(subacked(quint16, quint8)), this, SLOT(onMQTT_subacked(quint16, quint8))); connect(_client, SIGNAL(unsubscribed(const QString &)), this, SLOT(onMQTT_unsubscribed(const QString &))); connect(_client, SIGNAL(unsubacked(quint16)), this, SLOT(onMQTT_unsubacked(quint16))); connect(_client, SIGNAL(pong()), this, SLOT(onMQTT_Pong())); connect(_client, SIGNAL(disconnected()), this, SLOT(onMQTT_disconnected())); }
//--------------------------------------------- //--------------------------------------------- void Client::onReceived(Frame &frame) { quint8 qos = 0; bool retain, dup; QString topic; quint16 mid = 0; quint8 header = frame.header(); quint8 type = GETTYPE(header); Message message; qCDebug(client, "handleFrame: type=%d", type); switch(type) { case CONNACK: //skip reserved frame.readChar(); handleConnack(frame.readChar()); break; case PUBLISH: qos = GETQOS(header);; retain = GETRETAIN(header); dup = GETDUP(header); topic = frame.readString(); if( qos > MQTT_QOS0) { mid = frame.readInt(); } message.setId(mid); message.setTopic(topic); message.setPayload(frame.data()); message.setQos(qos); message.setRetain(retain); message.setDup(dup); handlePublish(message); break; case PUBACK: case PUBREC: case PUBREL: case PUBCOMP: mid = frame.readInt(); handlePuback(type, mid); break; case SUBACK: mid = frame.readInt(); qos = frame.readChar(); emit subacked(mid, qos); break; case UNSUBACK: emit unsubacked(mid); break; case PINGRESP: emit pong(); break; default: break; } }