38 lines
1009 B
C++
38 lines
1009 B
C++
// 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<std::chrono::microseconds> &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;
|
|
}
|