#ifndef ZMQRECEIVER_H #define ZMQRECEIVER_H #include #include #include #include #include #include #include #include #include #include "date.h" #include "RingBuffer.hpp" #include "config.hpp" struct HeaderDataType { std::string type; size_t value_shape; std::string endianness; size_t value_bytes_size; bool is_array; HeaderDataType(const std::string& type); 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 { typedef std::unordered_map header_map; const header_map& header_values_type_; zmq::context_t context_; zmq::socket_t socket_; zmq::message_t message_header_; zmq::message_t message_data_; boost::property_tree::ptree json_header; public: ZmqReceiver( const header_map& header_values_type, const int n_io_threads=config::zmq_n_io_threads ); void connect( const std::string& connect_address, const int receive_timeout=config::zmq_receive_timeout); void disconnect(); std::shared_ptr read_json_header(const std::string& header); std::pair, char*> receive(); }; #endif