Skip to content

Commit

Permalink
Fixed connection problem for slow connections using the MQTT client.
Browse files Browse the repository at this point in the history
  • Loading branch information
grodansparadis committed Feb 10, 2025
1 parent c05c1db commit 281ec65
Show file tree
Hide file tree
Showing 7 changed files with 120 additions and 92 deletions.
2 changes: 2 additions & 0 deletions CHANGELOG
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
Changelog for VSCP Works QT
===========================

250210 AKHE Fixed connection problem for slow connections using the MQTT client.
250207 AKHE *** Release 0.0.1 ***
210923 AKHE Updated spdlog to 1.9.2
65 changes: 34 additions & 31 deletions src/cdlgconnsettingsmqtt.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -60,9 +60,9 @@
SubscribeItem::SubscribeItem(const QString& topic, enumMqttMsgFormat fmt, int qos, uint32_t v5_options)
: QListWidgetItem(topic)
{
m_topic = topic;
m_format = fmt;
m_qos = qos & 3;
m_topic = topic;
m_format = fmt;
m_qos = qos & 3;
m_v5_options = v5_options;

m_bActive = true; // Active by default
Expand Down Expand Up @@ -353,71 +353,75 @@ CDlgConnSettingsMqtt::setPassword(const QString& str)
}

///////////////////////////////////////////////////////////////////////////////
// getConnectionTimeout
// getResponseTimeout
//

uint32_t
CDlgConnSettingsMqtt::getConnectionTimeout(void)
CDlgConnSettingsMqtt::getResponseTimeout(void)
{
return m_client.getConnectionTimeout();
return m_client.getResponseTimeout();
}

///////////////////////////////////////////////////////////////////////////////
// setConnectionTimeout
// setResponseTimeout
//

void
CDlgConnSettingsMqtt::setConnectionTimeout(uint32_t timeout)
CDlgConnSettingsMqtt::setResponseTimeout(uint32_t timeout)
{
m_client.setConnectionTimeout(timeout);
vscpworks* pworks = (vscpworks*)QCoreApplication::instance();
QString str = pworks->decimalToStringInBase(timeout);
ui->editKeepAlive->setText(str);
}

///////////////////////////////////////////////////////////////////////////////
// getResponseTimeout
// getKeepAlive
//

uint32_t
CDlgConnSettingsMqtt::getResponseTimeout(void)
CDlgConnSettingsMqtt::getKeepAlive(void)
{
return m_client.getResponseTimeout();
return vscp_readStringValue(ui->editKeepAlive->text().toStdString());
}

///////////////////////////////////////////////////////////////////////////////
// setResponseTimeout
// setKeepAlive
//

void
CDlgConnSettingsMqtt::setResponseTimeout(uint32_t timeout)
CDlgConnSettingsMqtt::setKeepAlive(uint32_t timeout)
{
vscpworks* pworks = (vscpworks*)QCoreApplication::instance();
QString str = pworks->decimalToStringInBase(timeout);
QString str = pworks->decimalToStringInBase(timeout, 10);
ui->editKeepAlive->setText(str);
}

///////////////////////////////////////////////////////////////////////////////
// getKeepAlive
// getConnectionTimeout
//

uint32_t
CDlgConnSettingsMqtt::getKeepAlive(void)
CDlgConnSettingsMqtt::getConnectTimeout(void)
{
return vscp_readStringValue(ui->editKeepAlive->text().toStdString());
uint32_t timeout = vscp_readStringValue(ui->editConnectTimeout->text().toStdString());
m_client.setConnectionTimeout(timeout);
return timeout;
}

///////////////////////////////////////////////////////////////////////////////
// setKeepAlive
// setConnectionTimeout
//

void
CDlgConnSettingsMqtt::setKeepAlive(uint32_t timeout)
CDlgConnSettingsMqtt::setConnectTimeout(uint32_t timeout)
{
vscpworks* pworks = (vscpworks*)QCoreApplication::instance();
QString str = pworks->decimalToStringInBase(timeout, 10);
ui->editKeepAlive->setText(str);
ui->editConnectTimeout->setText(str);
}

///////////////////////////////////////////////////////////////////////////////
// isCleabSessionEnabled
// isCleanSessionEnabled
//

bool
Expand Down Expand Up @@ -609,7 +613,7 @@ CDlgConnSettingsMqtt::getJson(void)
m_jsonConfig["clientid"] = getClientId().toStdString();
m_jsonConfig["user"] = getUser().toStdString();
m_jsonConfig["password"] = getPassword().toStdString();
m_jsonConfig["connection-timeout"] = (int)getConnectionTimeout();
m_jsonConfig["connection-timeout"] = (int)getConnectTimeout();
m_jsonConfig["response-timeout"] = (int)getResponseTimeout();
m_jsonConfig["keepalive"] = (int)getKeepAlive();
m_jsonConfig["cleansession"] = isCleanSessionEnabled();
Expand Down Expand Up @@ -688,8 +692,7 @@ CDlgConnSettingsMqtt::setJson(const json* pobj)
}

if (m_jsonConfig.contains("connection-timeout") && m_jsonConfig["connection-timeout"].is_number()) {
setConnectionTimeout(
m_jsonConfig["connection-timeout"].get<uint32_t>());
setConnectTimeout(m_jsonConfig["connection-timeout"].get<uint32_t>());
}

if (m_jsonConfig.contains("response-timeout") && m_jsonConfig["response-timeout"].is_number()) {
Expand Down Expand Up @@ -743,9 +746,9 @@ CDlgConnSettingsMqtt::setJson(const json* pobj)
spdlog::trace(subscribeArray.dump(4).c_str());

for (auto v : subscribeArray) {
int qos = 0;
int qos = 0;
uint32_t v5_options = 0;
json item = v;
json item = v;
if (item.contains("topic") && item.contains("format")) {
if (item.contains("qos")) {
qos = item["qos"].get<int>();
Expand All @@ -754,10 +757,10 @@ CDlgConnSettingsMqtt::setJson(const json* pobj)
v5_options = item["v5_options"].get<uint32_t>();
}
SubscribeItem* pitem =
new SubscribeItem(item["topic"].get<std::string>().c_str(),
static_cast<enumMqttMsgFormat>(item["format"].get<int>()),
qos,
v5_options);
new SubscribeItem(item["topic"].get<std::string>().c_str(),
static_cast<enumMqttMsgFormat>(item["format"].get<int>()),
qos,
v5_options);
ui->listSubscribe->addItem(pitem);
}
}
Expand Down
11 changes: 6 additions & 5 deletions src/cdlgconnsettingsmqtt.h
Original file line number Diff line number Diff line change
Expand Up @@ -187,11 +187,6 @@ class CDlgConnSettingsMqtt : public QDialog {
*/
QString getPassword(void);
void setPassword(const QString& str);
/*!
Setters/getters for connection timeout
*/
uint32_t getConnectionTimeout(void);
void setConnectionTimeout(uint32_t timeout);

/*!
Setters/getters for response timeout
Expand All @@ -205,6 +200,12 @@ class CDlgConnSettingsMqtt : public QDialog {
uint32_t getKeepAlive(void);
void setKeepAlive(uint32_t timeout);

/*!
Setters/getters for connection timeout period
*/
uint32_t getConnectTimeout(void);
void setConnectTimeout(uint32_t timeout);

/*!
Setters/getters for clean session
*/
Expand Down
Loading

0 comments on commit 281ec65

Please sign in to comment.