#ifndef MQTT_PROTOCOL_H #define MQTT_PROTOCOL_H #include "protocol.h" #include #include #include #include #include #include #include #include #include #include #define MQTT_PING_INTERVAL_SECONDS 90 #define MQTT_RECONNECT_INTERVAL_MS 10000 #define MQTT_PROTOCOL_SERVER_HELLO_EVENT (1 << 0) class MqttProtocol : public Protocol { public: MqttProtocol(); ~MqttProtocol(); void Start() override; void SendAudio(const std::vector& data) override; bool OpenAudioChannel() override; void CloseAudioChannel() override; bool IsAudioChannelOpened() const override; private: EventGroupHandle_t event_group_handle_; std::string endpoint_; std::string client_id_; std::string username_; std::string password_; std::string publish_topic_; std::mutex channel_mutex_; Mqtt* mqtt_ = nullptr; Udp* udp_ = nullptr; mbedtls_aes_context aes_ctx_; std::string aes_nonce_; std::string udp_server_; int udp_port_; uint32_t local_sequence_; uint32_t remote_sequence_; bool StartMqttClient(bool report_error=false); void ParseServerHello(const cJSON* root); std::string DecodeHexString(const std::string& hex_string); bool SendText(const std::string& text) override; }; #endif // MQTT_PROTOCOL_H