34 lines
1.1 KiB
C++
34 lines
1.1 KiB
C++
// 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<uint8_t> 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();
|
|
}
|