// Copyright (2019-2023) Paul Scherrer Institute #ifndef JUNGFRAUJOCH_ZMQIMAGEPUSHER_H #define JUNGFRAUJOCH_ZMQIMAGEPUSHER_H #include #include "ImagePusher.h" #include "ThreadSafeFIFO.h" #include "ZMQWrappers.h" #include "DiffractionSpot.h" #include "../frame_serialize/JFJochFrameSerializer.h" class ZMQImagePusher : public ImagePusher { std::vector> contexts; std::vector> sockets; int64_t file_count = 1; public: void SendImage(const uint8_t *image_data, size_t image_size, int64_t image_number) override; void SendImage(const uint8_t *image_data, size_t image_size, int64_t image_number, ZeroCopyReturnValue *z) override; ZMQImagePusher(ZMQContext &context, const std::vector& addr, int32_t send_buffer_high_watermark = -1, int32_t send_buffer_size = -1); // High performance implementation, where each socket has dedicated ZMQ context explicit ZMQImagePusher(const std::vector& addr, int32_t send_buffer_high_watermark = -1, int32_t send_buffer_size = -1); void StartDataCollection(const StartMessage& message) override; void EndDataCollection(const EndMessage& message) override; }; #endif //JUNGFRAUJOCH_ZMQIMAGEPUSHER_H