// Copyright (2019-2023) Paul Scherrer Institute #include "ZMQPreviewPublisher.h" ZMQPreviewPublisher::ZMQPreviewPublisher(ZMQContext& context, const std::string& addr) : socket(context, ZMQSocketType::Pub) { socket.SendWaterMark(2).NoLinger(); socket.Bind(addr); } void ZMQPreviewPublisher::StartDataCollection(const uint8_t *image_data, size_t image_size, int64_t preview_stride) { { std::unique_lock ul(m); stride = preview_stride; current_part = -1; } socket.Send(image_data, image_size); } void ZMQPreviewPublisher::SendImage(const uint8_t *image_data, size_t image_size, int64_t image_number) { { std::unique_lock ul(m); int64_t part = image_number / stride; if (current_part >= part) return; else current_part = part; } socket.Send(image_data, image_size); }