// Copyright (2019-2024) Paul Scherrer Institute #include "ZMQPreviewSocket.h" ZMQPreviewSocket::ZMQPreviewSocket(const std::string &addr) : counter(std::chrono::seconds(1)), enable(true), socket(ZMQSocketType::Pub) { socket.Conflate(true); socket.Bind(addr); } ZMQPreviewSocket &ZMQPreviewSocket::Period(const std::optional &period) { counter.Period(period); enable = period.has_value(); return *this; } void ZMQPreviewSocket::SendImage(const uint8_t *image_data, size_t image_size) { if (counter.GeneratePreview()) socket.Send(image_data, image_size, false); } std::string ZMQPreviewSocket::GetAddress() { return socket.GetEndpointName(); } ZMQPreviewSettings ZMQPreviewSocket::GetSettings() { return { .period = counter.GetPeriod(), .address = socket.GetEndpointName() }; } ZMQPreviewSocket &ZMQPreviewSocket::ImportSettings(const ZMQPreviewSettings &settings) { Period(settings.period); return *this; }