.. _program_listing_file_publisher.hpp: Program Listing for File publisher.hpp ====================================== |exhale_lsh| :ref:`Return to documentation for file ` (``publisher.hpp``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp #ifndef FELIX_DATAPUBLISHER_H_ #define FELIX_DATAPUBLISHER_H_ #include #include #include #include #include "elink.hpp" #include "completion_table.hpp" class Publisher { protected: size_t m_max_msg_size{}; uint32_t m_max_iov_len{}; [[nodiscard]] std::uint8_t truncate_msg_if_too_large(iovec *iov, uint32_t &size, std::uint8_t status); public: using Callback = std::function; enum Result { OK = 0, ERROR = 1, AGAIN = 2, PARTIAL = 3, ERROR_TOO_BIG = 4, NO_SUBSCRIBERS = 5, DECODING_ERROR = 7 }; virtual ~Publisher() = default; virtual bool declare(const std::vector &elinks) = 0; virtual Result publish(felix_id_t fid, iovec *iov, uint32_t iovlen, size_t bytes, uint32_t block_addr, std::uint8_t status) = 0; virtual Result publish(felix_id_t fid, uint8_t *data, size_t len) = 0; virtual Result flush(felix_id_t fid) = 0; virtual void set_periodic_callback(uint32_t period_us, Callback callback) = 0; virtual void set_asynch_callback(Callback callback) = 0; virtual void fire_asynch_callback() = 0; virtual const CompletionTable* get_completion_table() = 0; // monitoring virtual uint32_t get_resource_counter() = 0; virtual uint32_t get_subscription_number() = 0; virtual uint64_t get_resource_available_calls() = 0; }; #endif /* FELIX_DATAPUBLISHER_H_ */