#pragma once

#include <memory>
#include <filesystem>
#include <thread>
#include <atomic>
#include <string>

#include "../../profinet/profinet_iface.hpp"

struct ProfinetPipesSettings {
    bool enable;
    std::string out_pipe_name;
    std::string inp_pipe_name;
};

class ProfinetPipes {
public:
    ProfinetPipes();

    ~ProfinetPipes();

    void Init( ProfinetPipesSettings& sett );

    void listen_pipe(ProfinetIface * p_profinet);

    void Start(ProfinetIface * p_profinet);

private:
    /** Поток обработки входящих данных от именнованого канала. */
    std::shared_ptr< std::istream > p_input_stream_;
        
    /** Поток для отправки данных в именнованй канал. */
    std::shared_ptr< std::ostream > p_output_stream_;

    std::thread       listen_thread_;     /// Поток в котором исполняется PeriodicOperations
    std::atomic<bool> listen_thread_stop_; /// Флаг завершения потока

    bool enable_;
};