#pragma once #include #include #include #include #include #include #ifdef __APPLE__ #define CLOCK_BOOTTIME CLOCK_MONOTONIC #endif #define MSG_MULTIPLE_PUBLISHERS 100 bool messaging_use_zmq(); 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, bool check_endpoint=true) = 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, std::string address="127.0.0.1", bool conflate=false, bool check_endpoint=true); virtual ~SubSocket(){} }; class PubSocket { public: virtual int connect(Context *context, std::string endpoint, bool check_endpoint=true) = 0; virtual int sendMessage(Message *message) = 0; virtual int send(char *data, size_t size) = 0; virtual bool all_readers_updated() = 0; static PubSocket * create(); static PubSocket * create(Context * context, std::string endpoint, bool check_endpoint=true); static PubSocket * create(Context * context, std::string endpoint, int port, bool check_endpoint=true); 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(){} };