diff --git a/CMakeLists.txt b/CMakeLists.txt index 771bb955..c4f15273 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,7 +2,7 @@ set(AGENT_VERSION_MAJOR 2) set(AGENT_VERSION_MINOR 3) set(AGENT_VERSION_PATCH 0) -set(AGENT_VERSION_BUILD 10) +set(AGENT_VERSION_BUILD 11) set(AGENT_VERSION_RC "") # This minimum version is to support Visual Studio 2019 and C++ feature checking and FetchContent diff --git a/src/mtconnect/configuration/agent_config.cpp b/src/mtconnect/configuration/agent_config.cpp index 80174ad8..a2fd59da 100644 --- a/src/mtconnect/configuration/agent_config.cpp +++ b/src/mtconnect/configuration/agent_config.cpp @@ -909,7 +909,7 @@ namespace mtconnect::configuration { string host, protocol, path; auto url = *GetOption(options, configuration::Url); - boost::regex pat("^([^:]+)://([^:/]+)(:[0-9]+)?(/?.+)"); + boost::regex pat("^([^:]+)://([^:/]+)(:[0-9]+)?(/.+)?"); boost::match_results match; if (boost::regex_match(url, match, pat)) { diff --git a/src/mtconnect/configuration/service.cpp b/src/mtconnect/configuration/service.cpp index 557c6d9e..5840952c 100644 --- a/src/mtconnect/configuration/service.cpp +++ b/src/mtconnect/configuration/service.cpp @@ -575,7 +575,7 @@ namespace mtconnect { boost::optional command; boost::optional config; - const char *argp[3] = {"agent", "run", (const char *) configFile}; + const char *argp[3] = {"agent", "run", (const char *)configFile}; auto options = g_service->parseOptions(3, argp, command, config); g_service->initialize(options); diff --git a/src/mtconnect/mqtt/mqtt_client_impl.hpp b/src/mtconnect/mqtt/mqtt_client_impl.hpp index 38ae0f5e..510e8ece 100644 --- a/src/mtconnect/mqtt/mqtt_client_impl.hpp +++ b/src/mtconnect/mqtt/mqtt_client_impl.hpp @@ -87,7 +87,7 @@ namespace mtconnect { m_password = GetOption(options, configuration::MqttPassword); std::stringstream url; - url << "mqtt://" << m_host << ':' << m_port; + url << "mqtt://" << m_host << ':' << m_port << '/'; m_url = url.str(); // Some brokers require specific ClientID provided. @@ -153,7 +153,7 @@ namespace mtconnect { else { LOG(info) << "MQTT ConnAck: MQTT connection failed: " << ec; - reconnect(); + disconnected(); } return true; }); @@ -162,12 +162,9 @@ namespace mtconnect { LOG(info) << "MQTT " << m_url << ": connection closed"; // Queue on a strand m_connected = false; - if (m_handler && m_handler->m_disconnected) - m_handler->m_disconnected(shared_from_this()); - m_handler->m_disconnected(shared_from_this()); if (m_running) { - reconnect(); + disconnected(); return true; } else @@ -180,7 +177,7 @@ namespace mtconnect { LOG(error) << "error: " << ec.message(); m_connected = false; if (m_running) - reconnect(); + disconnected(); }); client->set_publish_handler([this](mqtt::optional packet_id, @@ -359,6 +356,19 @@ namespace mtconnect { m_handler->m_receive(shared_from_this(), string(topic), string(contents)); } + void disconnected() + { + NAMED_SCOPE("MqttClientImpl::disconnected"); + + LOG(info) << "Calling handler disconnected"; + + if (m_handler && m_handler->m_disconnected) + m_handler->m_disconnected(shared_from_this()); + + if (m_running) + reconnect(); + } + /// /// ///