Skip to content
Snippets Groups Projects
Select Git revision
  • 843c9960ebfae19d2f832e70ddc1ef442d7d5ea0
  • master default protected
  • ia2
  • adql2.1-ia2
  • private_rows
5 results

TestGetPositionInAllADQLObject.java

Blame
  • ZMQPublisher.hpp 2.20 KiB
    #ifndef __ZMQPUBLISHER_HPP__
    #define __ZMQPUBLISHER_HPP__
    
    #include <zmq.hpp>
    #include <zmq_addon.hpp>
    #include "ZMQDictionary.hpp"
    
    #define DEFAULT_ADDRESS std::string("127.0.0.1")
    #define DEFAULT_PORT    16001
    
    
    /**
     * This class implements a publisher object over a ZeroMQ socket, single topic only.
     * It exposes a publish method which sends a dictionary of key, value format over the ZMQ socket.
     */
    class ZMQPublisher
    {
    public:
        /**
         * Constructors. Initializes the ZMQPublisher object with the given topic, address and port.
         */
        ZMQPublisher(const std::string& topic, const std::string address, const unsigned int port);
        ZMQPublisher(const std::string& topic) : ZMQPublisher(topic, DEFAULT_ADDRESS, DEFAULT_PORT) {};
        ZMQPublisher(const std::string& topic, const std::string address) : ZMQPublisher(topic, address, DEFAULT_PORT) {};
        ZMQPublisher(const std::string& topic, const unsigned int port) : ZMQPublisher(topic, DEFAULT_ADDRESS, port) {};
    
        /**
         * Destructor.
         */
        ~ZMQPublisher();
    
        /**
         * Public publisher method. This method accepts a ZMQDictionary object reference,
         * it converts it to a json-ified string and calls the protected publisher method.
         * @param dictionary, a json-like dictionary containing tuples of key, value format.
         */
        virtual void publish(const ZMQDictionary& dictionary);
    
        /**
         * Name of the topic on which the messages will be sent.
         */
        const std::string topic;
    
    protected:
        /**
         * Protected publisher method. This method sends a tuple (topic, payload) over the ZMQ socket.
         * @param payload, a json-ified string.
         */
        virtual void publish(const std::string& payload);
    
    private:
        /**
         * ZMQ constant buffer which references the topic name.
         */
        const zmq::const_buffer m_topic;
    
        /**
         * ZMQ context shared pointer. We use a pointer since the context must not be destroyed for communications to work properly.
         */
        std::shared_ptr<zmq::context_t> m_context;
    
        /**
         * ZMQ socket shared pointer. We use a pointer since the socket must not be destroyed for communications to work properly.
         */
        std::shared_ptr<zmq::socket_t> m_socket;
    };
    
    
    #endif /*__ZMQPUBLISHER_HPP__*/