Program Listing for File mqtt_subscriber.h

Return to documentation for file (src/bitrl/network/mqtt_subscriber.h)

//
// Created by alex on 11/23/25.
//

#ifndef MQTT_SUBSCRIBER_H
#define MQTT_SUBSCRIBER_H

#include <mqtt/async_client.h>
#include <string>
#include <optional>
#include <mutex>
#include <queue>

namespace bitrl
{
    namespace network
    {
        class MqttSubscriber: public virtual mqtt::callback
        {
        public:

            MqttSubscriber(const std::string& server, const std::string& topic);
            ~MqttSubscriber() override;

            std::string topic()const noexcept{return topic_;}

            void connect();
            std::optional<std::string> poll(std::chrono::milliseconds timeout = std::chrono::milliseconds(1000));

            std::optional<std::string> read(std::chrono::milliseconds timeout =
                                            std::chrono::milliseconds::zero());

            void message_arrived(mqtt::const_message_ptr msg) override;
        private:

            const std::string server_;
            const std::string topic_;

            mqtt::async_client cli_;
            mqtt::connect_options conn_opts_;

            std::mutex mutex_;
            std::condition_variable cv_;
            std::queue<std::string> queue_;

        };
    }
}

#endif //MQTT_SUBSCRIBER_H