#ifndef ZMQRECEIVER_H #define ZMQRECEIVER_H #include #include #include #include #include #include #include #include #include "RingBuffer.hpp" struct HeaderDataType { std::string type; size_t value_shape; std::string endianness; size_t value_bytes_size; HeaderDataType(const std::string& type, size_t shape); }; size_t get_type_byte_size(const std::string& type); void copy_value_to_buffer(const char* buffer, size_t offset, const boost::property_tree::ptree& json_value, const HeaderDataType& header_data_type); std::shared_ptr get_value_from_json(const boost::property_tree::ptree& json_header, const std::string& name, const HeaderDataType& header_data_type); class ZmqReceiver { const std::string connect_address; const int n_io_threads; const int receive_timeout; std::shared_ptr receiver = NULL; std::shared_ptr context = NULL; zmq::message_t message_header; zmq::message_t message_data; boost::property_tree::ptree json_header; std::shared_ptr> header_values_type = NULL; std::shared_ptr read_json_header(const std::string& header); public: ZmqReceiver(const std::string& connect_address, const int n_io_threads, const int receive_timeout, std::shared_ptr> header_values_type=NULL); virtual ~ZmqReceiver(){}; void connect(); std::pair, char*> receive(); const std::shared_ptr> get_header_values_type() const; }; #endif