1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104
|
/*
File : MQTT_test.cpp
Project : LabPlot
Description : Tests for MQTT import.
--------------------------------------------------------------------
SPDX-FileCopyrightText: 2018 Kovacs Ferencz <kferike98@gmail.com>
SPDX-License-Identifier: GPL-2.0-or-later
*/
#include "MainWindow.h"
#include "ui_MainWindow.h"
#include <QDateTime>
#include <QMessageBox>
#include <QMqttClient>
#include <QTimer>
#include <chrono>
#include <iostream>
#include <random>
MainWindow::MainWindow(int interval, QWidget* parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
, m_run(false) {
ui->setupUi(this);
m_timer = new QTimer(this);
m_timer->setInterval(interval);
m_client = std::make_unique<BrownianMotionMqttClient>(this, interval);
ui->lineEditHost->setText(m_client->hostname());
connect(m_client.get(), &QMqttClient::disconnected, this, &MainWindow::brokerDisconnected);
connect(m_timer, &QTimer::timeout, this, &MainWindow::publish);
connect(ui->lePublishInterval, &QLineEdit::textChanged, this, &MainWindow::intervalChanged);
connect(ui->bPublish, &QPushButton::clicked, this, &MainWindow::publish);
connect(m_client.get(), &QMqttClient::connected, this, &MainWindow::onConnect);
connect(m_client.get(), &QMqttClient::messageReceived, this, [this](const QByteArray& message, const QMqttTopicName& topic) {
const QString content = QDateTime::currentDateTime().toString() + QLatin1String(" Received Topic: %1").arg(topic.name())
+ QLatin1String(" Message:\n%1\n").arg(QString::fromUtf8(message));
ui->editLog->insertPlainText(content);
});
connect(ui->lineEditHost, &QLineEdit::textChanged, m_client.get(), &QMqttClient::setHostname);
connect(ui->spinBoxPort, QOverload<int>::of(&QSpinBox::valueChanged), this, &MainWindow::setClientPort);
}
MainWindow::~MainWindow() {
delete ui;
qApp->quit();
}
void MainWindow::on_buttonConnect_clicked() {
if (m_client->state() == QMqttClient::Disconnected) {
ui->lineEditHost->setEnabled(false);
ui->spinBoxPort->setEnabled(false);
ui->buttonConnect->setText(tr("Disconnect"));
m_client->connectToHost();
} else {
ui->lineEditHost->setEnabled(true);
ui->spinBoxPort->setEnabled(true);
ui->buttonConnect->setText(tr("Connect"));
m_client->disconnectFromHost();
}
}
void MainWindow::on_buttonQuit_clicked() {
QApplication::quit();
}
void MainWindow::brokerDisconnected() {
ui->lineEditHost->setEnabled(true);
ui->spinBoxPort->setEnabled(true);
ui->buttonConnect->setText(tr("Connect"));
}
void MainWindow::setClientPort(int p) {
m_client->setPort(p);
}
void MainWindow::on_buttonSubscribe_clicked() {
const auto& status = m_client->subscribeBrownianTopic();
if (!status.isEmpty())
QMessageBox::critical(this, QLatin1String("Error"), status);
else
m_timer->start();
}
void MainWindow::publish() {
m_client->publishBrownianData();
}
void MainWindow::intervalChanged(const QString& interval) {
int newInterval = interval.toInt();
m_timer->start(newInterval);
m_client->setInterval(newInterval);
}
void MainWindow::onConnect() {
const QString content = QDateTime::currentDateTime().toString() + QLatin1String(" Successfully connected to broker\n");
ui->editLog->insertPlainText(content);
}
|