// Copyright (2019-2024) Paul Scherrer Institute #include "ZMQStream2PreviewPublisher.h" #include "CBORStream2Serializer.h" ZMQStream2PreviewPublisher::ZMQStream2PreviewPublisher(ZMQContext& context, const std::string& addr) : socket(context, ZMQSocketType::Pub) { socket.Conflate(true).NoLinger(); socket.Bind(addr); } void ZMQStream2PreviewPublisher::StartDataCollection(const StartMessage& message) { // Start message is not transmitted here } bool ZMQStream2PreviewPublisher::SendImage(const DataMessage& message) { size_t approx_size = message.image.size + 2*1024*1024; std::vector serialization_buffer(approx_size); CBORStream2Serializer serializer(serialization_buffer.data(), serialization_buffer.size()); serializer.SerializeImage(message); return socket.Send(serialization_buffer.data(), serializer.GetBufferSize(), false); } bool ZMQStream2PreviewPublisher::EndDataCollection(const EndMessage &message) { return true; // End message is not transmitted here } std::string ZMQStream2PreviewPublisher::GetAddress() { return socket.GetEndpointName(); }