Files
Jungfraujoch/receiver/JFJochReceiverService.h

66 lines
3.2 KiB
C++

// Copyright (2019-2023) Paul Scherrer Institute
#ifndef JUNGFRAUJOCH_JFJOCHRECEIVERSERVICE_H
#define JUNGFRAUJOCH_JFJOCHRECEIVERSERVICE_H
#include "JFJochReceiver.h"
#include "jfjoch.grpc.pb.h"
#include <mutex>
#include "../common/NUMAHWPolicy.h"
class JFJochReceiverService final : public JFJochProtoBuf::gRPC_JFJochReceiver::Service {
NUMAHWPolicy numa_policy;
std::unique_ptr<JFJochReceiver> receiver;
std::vector<AcquisitionDevice *> &aq_devices;
Logger &logger;
ImagePusher &image_pusher;
ZMQPreviewPublisher *preview_publisher = nullptr;
int64_t nthreads = 8;
int64_t send_buffer_count = 32;
enum class ReceiverState {Idle, Running};
ReceiverState state = ReceiverState::Idle;
std::mutex state_mutex;
std::condition_variable measurement_done;
std::future<void> measurement;
void FinalizeMeasurement();
JFJochProtoBuf::DataProcessingSettings data_processing_settings;
public:
JFJochReceiverService(std::vector<AcquisitionDevice *> &open_capi_device,
Logger &logger, ImagePusher &pusher);
JFJochReceiverService& PreviewPublisher(ZMQPreviewPublisher *in_preview_writer);
JFJochReceiverService& NumThreads(int64_t input);
JFJochReceiverService& SendBufferCount(int64_t input);
JFJochReceiverService& NUMAPolicy(const NUMAHWPolicy& policy);
JFJochReceiverService& NUMAPolicy(const std::string& policy);
grpc::Status Start(grpc::ServerContext* context, const JFJochProtoBuf::ReceiverInput* request,
JFJochProtoBuf::Empty* response) override;
grpc::Status Abort(grpc::ServerContext* context, const JFJochProtoBuf::Empty* request,
JFJochProtoBuf::Empty* response) override;
grpc::Status Cancel(grpc::ServerContext* context, const JFJochProtoBuf::Empty* request,
JFJochProtoBuf::Empty* response) override;
grpc::Status Stop(grpc::ServerContext* context, const JFJochProtoBuf::Empty* request,
JFJochProtoBuf::ReceiverOutput* response) override;
grpc::Status GetStatus(grpc::ServerContext *context, const JFJochProtoBuf::Empty *request,
JFJochProtoBuf::ReceiverStatus *response) override;
grpc::Status SetDataProcessingSettings(grpc::ServerContext *context, const JFJochProtoBuf::DataProcessingSettings *request,
JFJochProtoBuf::Empty *response) override;
grpc::Status GetPreviewFrame(grpc::ServerContext *context, const JFJochProtoBuf::Empty *request,
JFJochProtoBuf::PreviewFrame *response) override;
grpc::Status GetNetworkConfig(grpc::ServerContext *context, const JFJochProtoBuf::Empty *request,
JFJochProtoBuf::ReceiverNetworkConfig *response) override;
grpc::Status GetDataProcessingPlots(grpc::ServerContext *context, const JFJochProtoBuf::PlotRequest *request,
JFJochProtoBuf::Plot *response) override;
grpc::Status GetRadialIntegrationProfiles(grpc::ServerContext *context, const JFJochProtoBuf::Empty *request,
JFJochProtoBuf::RadialIntegrationProfiles *response) override;
};
#endif //JUNGFRAUJOCH_JFJOCHRECEIVERSERVICE_H