summaryrefslogtreecommitdiffstats
path: root/tradeshow/iot-sensortag/mqttdataproviderpool.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tradeshow/iot-sensortag/mqttdataproviderpool.cpp')
-rw-r--r--tradeshow/iot-sensortag/mqttdataproviderpool.cpp69
1 files changed, 65 insertions, 4 deletions
diff --git a/tradeshow/iot-sensortag/mqttdataproviderpool.cpp b/tradeshow/iot-sensortag/mqttdataproviderpool.cpp
index 24ce47c..55cd0f7 100644
--- a/tradeshow/iot-sensortag/mqttdataproviderpool.cpp
+++ b/tradeshow/iot-sensortag/mqttdataproviderpool.cpp
@@ -52,6 +52,8 @@
#include "mqttdataprovider.h"
#include <QtCore/QDebug>
+#include <QtCore/QFile>
+#include <QtCore/QJsonDocument>
MqttDataProviderPool::MqttDataProviderPool(QObject *parent)
: DataProviderPool(parent)
@@ -66,10 +68,10 @@ void MqttDataProviderPool::startScanning()
emit providersUpdated();
emit dataProvidersChanged();
- m_client->setHostname(QLatin1String(MQTT_BROKER));
- m_client->setPort(MQTT_PORT);
- m_client->setUsername(QByteArray(MQTT_USERNAME));
- m_client->setPassword(QByteArray(MQTT_PASSWORD));
+ m_client->setHostname(MqttCredentials::getBroker());
+ m_client->setPort((quint16)MqttCredentials::getPort());
+ m_client->setUsername(MqttCredentials::getUsername());
+ m_client->setPassword(MqttCredentials::getPassword());
connect(m_client, &QMqttClient::connected, [this]() {
auto sub = m_client->subscribe(QLatin1String("sensors/active"));
@@ -121,3 +123,62 @@ void MqttDataProviderPool::deviceUpdate(const QMqttMessage &msg)
emit dataProvidersChanged();
}
}
+
+namespace {
+ static QString gBroker;
+ static int gPort{0};
+ static QString gUser;
+ static QString gPassword;
+ bool resolveCredentials() {
+ static bool resolved = false;
+ if (resolved)
+ return true;
+
+ QFile f(QLatin1String("broker.json"));
+ if (!f.open(QIODevice::ReadOnly)) {
+ qDebug() << "Could not find or open broker.json";
+ return false;
+ }
+ const QByteArray data = f.readAll();
+ if (data.isEmpty()) {
+ qDebug() << "broker.json file empty";
+ return false;
+ }
+ QJsonDocument doc = QJsonDocument::fromJson(data);
+ if (doc.isNull()) {
+ qDebug() << "broker.json does not contain valid data";
+ return false;
+ }
+ gBroker = doc["broker"].toString();
+ gPort = doc["port"].toInt();
+ gUser = doc["user"].toString();
+ gPassword = doc["password"].toString();
+ qDebug() << "broker.json parsed. Using broker:" << gBroker << ":" << gPort;
+ resolved = true;
+ return true;
+ }
+}
+
+QString MqttCredentials::getBroker()
+{
+ resolveCredentials();
+ return gBroker;
+}
+
+int MqttCredentials::getPort()
+{
+ resolveCredentials();
+ return gPort;
+}
+
+QString MqttCredentials::getUsername()
+{
+ resolveCredentials();
+ return gUser;
+}
+
+QString MqttCredentials::getPassword()
+{
+ resolveCredentials();
+ return gPassword;
+}