// SPDX-FileCopyrightText: 2025 Filip Leonarski, Paul Scherrer Institute // SPDX-License-Identifier: GPL-3.0-only #ifndef JFJOCH_IMAGEPULLER_H #define JFJOCH_IMAGEPULLER_H #include #include #include "../common/ZMQWrappers.h" #include "../frame_serialize/CBORStream2Deserializer.h" #include "../common/ThreadSafeFIFO.h" struct ImagePullerOutput { std::shared_ptr msg; std::shared_ptr cbor; }; struct ImagePullerStatistics { size_t outside_fifo_max_util = 0; }; class ImagePuller { protected: ThreadSafeFIFO outside_fifo; // assuming 1 file is <1000 files, this should be enough to buffer public: constexpr static size_t DefaultQueueSize = 1000; constexpr static auto PollTimeout = std::chrono::milliseconds(100); explicit ImagePuller(size_t fifo_size = DefaultQueueSize); virtual ~ImagePuller() = default; [[nodiscard]] std::optional PollImage(std::chrono::microseconds timeout = PollTimeout); [[nodiscard]] size_t GetMaxFifoUtilization() const; [[nodiscard]] size_t GetCurrentFifoUtilization() const; virtual void Disconnect() = 0; }; #endif //JFJOCH_IMAGEPULLER_H