// 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 force_disconnect(); void publish(const std::string& topic, const std::string& payload, int qos = -1); void subscribe(const std::string& topic, int qos = -1); void unsubscribe(const std::string& topic); 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_; };