diff options
Diffstat (limited to 'tradeshow/iot-sensortag/mqttdataproviderpool.cpp')
-rw-r--r-- | tradeshow/iot-sensortag/mqttdataproviderpool.cpp | 69 |
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; +} |