239a441ee6
Build Packages / Unit tests (push) Successful in 1h20m34s
Build Packages / build:rpm (rocky8) (push) Successful in 13m32s
Build Packages / Generate python client (push) Successful in 24s
Build Packages / build:rpm (ubuntu2404_nocuda) (push) Successful in 13m6s
Build Packages / build:rpm (rocky9_sls9) (push) Successful in 11m32s
Build Packages / XDS test (durin plugin) (push) Successful in 10m49s
Build Packages / build:rpm (ubuntu2404) (push) Successful in 14m8s
Build Packages / DIALS test (push) Successful in 14m57s
Build Packages / Build documentation (push) Successful in 47s
Build Packages / build:rpm (rocky8_nocuda) (push) Successful in 13m30s
Build Packages / build:rpm (rocky9_nocuda) (push) Successful in 14m23s
Build Packages / build:rpm (rocky8_sls9) (push) Successful in 14m40s
Build Packages / Create release (push) Has been skipped
Build Packages / build:rpm (ubuntu2204_nocuda) (push) Successful in 13m14s
Build Packages / build:rpm (ubuntu2204) (push) Successful in 11m55s
Build Packages / build:rpm (rocky9) (push) Successful in 14m23s
Build Packages / XDS test (JFJoch plugin) (push) Successful in 9m48s
Build Packages / XDS test (neggia plugin) (push) Successful in 7m10s
This is an UNSTABLE release. The release has significant modifications and bug fixes, if things go wrong, it is better to revert to 1.0.0-rc.132. * jfjoch_broker: For DECTRIS detectors, ZeroMQ link is persistent, to save time for establishing new connection * jfjoch_broker: Minor bug fixes for rare conditions Reviewed-on: #50
61 lines
1.7 KiB
C++
61 lines
1.7 KiB
C++
// SPDX-FileCopyrightText: 2024 Filip Leonarski, Paul Scherrer Institute <filip.leonarski@psi.ch>
|
|
// SPDX-License-Identifier: GPL-3.0-only
|
|
|
|
#ifndef JUNGFRAUJOCH_ZMQIMAGEPULLER_H
|
|
#define JUNGFRAUJOCH_ZMQIMAGEPULLER_H
|
|
|
|
#include <future>
|
|
|
|
#include "../common/ZMQWrappers.h"
|
|
#include "../common/Logger.h"
|
|
#include "../common/SpotToSave.h"
|
|
#include "../frame_serialize/CBORStream2Deserializer.h"
|
|
#include "../common/ThreadSafeFIFO.h"
|
|
#include "ImagePuller.h"
|
|
|
|
|
|
|
|
class ZMQImagePuller : public ImagePuller {
|
|
const uint32_t default_receive_watermark = 100;
|
|
const uint32_t default_repub_watermark = 220;
|
|
|
|
// ZeroMQ receive timeout allows to check for abort value from time to time
|
|
constexpr static auto ReceiveTimeout = std::chrono::milliseconds(100);
|
|
constexpr static auto RepubTimeout = std::chrono::milliseconds(100);
|
|
|
|
ZMQSocket socket;
|
|
std::string addr;
|
|
|
|
std::atomic<int> disconnect = 0;
|
|
|
|
std::unique_ptr<ZMQSocket> repub_socket;
|
|
|
|
ThreadSafeFIFO<ImagePullerOutput> cbor_fifo{200};
|
|
ThreadSafeFIFO<ImagePullerOutput> repub_fifo{200};
|
|
|
|
std::thread puller_thread;
|
|
std::thread cbor_thread;
|
|
std::thread repub_thread;
|
|
|
|
void PullerThread();
|
|
void CBORThread();
|
|
void RepubThread();
|
|
Logger logger{"ZMQImagePuller"};
|
|
|
|
std::atomic<bool> suspend{false};
|
|
public:
|
|
explicit ZMQImagePuller(
|
|
const std::string &zmq_addr,
|
|
const std::string &repub_address = "",
|
|
const std::optional<int32_t> &rcv_watermark = {},
|
|
const std::optional<int32_t> &repub_watermark = {});
|
|
~ZMQImagePuller();
|
|
|
|
void Disconnect() override;
|
|
|
|
void Suspend();
|
|
void ResumeAndClear();
|
|
};
|
|
|
|
#endif //JUNGFRAUJOCH_ZMQIMAGEPULLER_H
|