// mqtt_client.hpp #pragma once #include #include #include #include #include #include #include "app_config.hpp" #include "logger.hpp" class MQTTClient : public virtual mqtt::callback { public: using ConnectCallback = std::function; using DisconnectCallback = std::function; using MessageCallback = std::function; explicit MQTTClient(const MQTTConfig &config); ~MQTTClient(); void setConnectCallback(ConnectCallback cb); void setDisconnectCallback(DisconnectCallback cb); void setMessageCallback(MessageCallback cb); void connect(); void disconnect(); void publish(const std::string &topic, const std::string &payload, int qos = -1); void subscribe(const std::string &topic, int qos = -1); void switchServer(const MQTTConfig &newConfig); bool isConnected() const; private: void initializeClient(); // 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 {} MQTTConfig config_; std::shared_ptr client_; std::atomic connected_; std::mutex mutex_; ConnectCallback on_connect_; DisconnectCallback on_disconnect_; MessageCallback on_message_; };