// SPDX-FileCopyrightText: 2024 Filip Leonarski, Paul Scherrer Institute // SPDX-License-Identifier: GPL-3.0-only #pragma once #include #include #include #include #include "ImagePusher.h" #include "../common/ZMQWrappers.h" #include "../common/ThreadSafeFIFO.h" #include "../common/ZeroCopyReturnValue.h" class ZMQStream2PusherSocket { std::mutex m; bool active = false; std::future send_future; ThreadSafeFIFO queue; ZMQSocket s; void WriterThread(); public: explicit ZMQStream2PusherSocket(const std::string& addr, std::optional send_buffer_high_watermark, std::optional send_buffer_size); std::string GetEndpointName(); // Strictly serial, as order of these is important bool Send(const uint8_t *data, size_t size); void StartWriterThread(); void StopWriterThread(); // Thread-safe void SendImage(ZeroCopyReturnValue &z); };