diff --git a/include/mqtt_client.hpp b/include/mqtt_client.hpp index ba2b000..b2a05ba 100644 --- a/include/mqtt_client.hpp +++ b/include/mqtt_client.hpp @@ -38,6 +38,7 @@ private: // mqtt::callback 实现 void connection_lost(const std::string &cause) override; + void connected(const std::string &cause) override; void message_arrived(mqtt::const_message_ptr msg) override; void delivery_complete(mqtt::delivery_token_ptr token) override {} diff --git a/src/mqtt_client.cpp b/src/mqtt_client.cpp index aec988c..81979c3 100644 --- a/src/mqtt_client.cpp +++ b/src/mqtt_client.cpp @@ -37,24 +37,18 @@ void MQTTClient::connect() .password(config_.password) .finalize(); - auto tok = client_->connect(connOpts); // 异步连接 - if (!tok->wait_for(std::chrono::seconds(2))) // 设置超时 - { - LOG_WARN("[MQTT] Connect timed out to broker: " + config_.server_ip); - startReconnect(); - return; - } + auto tok = client_->connect(connOpts); + tok->wait(); // 阻塞直到连接成功或失败,不用 wait_for(2s) + LOG_INFO("[MQTT] Connected to broker: " + config_.server_ip); connected_ = true; - reconnect_active_ = false; - if (on_connect_) on_connect_(); } catch (const mqtt::exception &e) { LOG_ERROR("[MQTT] Connect failed: " + std::string(e.what())); - startReconnect(); + // startReconnect(); } } @@ -158,9 +152,19 @@ void MQTTClient::connection_lost(const std::string &cause) { std::lock_guard lock(mutex_); connected_ = false; + LOG_WARN("[MQTT] Connection lost: " + cause); if (on_disconnect_) on_disconnect_(); - startReconnect(); + // startReconnect(); +} + +void MQTTClient::connected(const std::string &cause) +{ + std::lock_guard lock(mutex_); + connected_ = true; + LOG_INFO("[MQTT] Reconnected: " + cause); + if (on_connect_) + on_connect_(); } void MQTTClient::message_arrived(mqtt::const_message_ptr msg)