#pragma once #include #include #include #define MSG_MULTIPLE_PUBLISHERS 100 class Context { public: virtual void * getRawContext() = 0; static Context * create(); virtual ~Context(){}; }; class Message { public: virtual void init(size_t size) = 0; virtual void init(char * data, size_t size) = 0; virtual void close() = 0; virtual size_t getSize() = 0; virtual char * getData() = 0; virtual ~Message(){}; }; class SubSocket { public: virtual int connect(Context *context, std::string endpoint, std::string address, bool conflate=false) = 0; virtual void setTimeout(int timeout) = 0; virtual Message *receive(bool non_blocking=false) = 0; virtual void * getRawSocket() = 0; static SubSocket * create(); static SubSocket * create(Context * context, std::string endpoint); static SubSocket * create(Context * context, std::string endpoint, std::string address); static SubSocket * create(Context * context, std::string endpoint, std::string address, bool conflate); virtual ~SubSocket(){}; }; class PubSocket { public: virtual int connect(Context *context, std::string endpoint) = 0; virtual int sendMessage(Message *message) = 0; virtual int send(char *data, size_t size) = 0; static PubSocket * create(); static PubSocket * create(Context * context, std::string endpoint); virtual ~PubSocket(){}; }; class Poller { public: virtual void registerSocket(SubSocket *socket) = 0; virtual std::vector poll(int timeout) = 0; static Poller * create(); static Poller * create(std::vector sockets); virtual ~Poller(){}; };