Select Git revision
XmlSerializer.java
-
Robert Butora authoredRobert Butora authored
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__*/