Files
Jungfraujoch/receiver/JFJochReceiverService.h

73 lines
3.5 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;
AcquisitionDeviceGroup &aq_devices;
std::unique_ptr<JFCalibration> calibration;
std::unique_ptr<DiffractionExperiment> experiment;
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();
DataProcessingSettings data_processing_settings;
public:
JFJochReceiverService(AcquisitionDeviceGroup &aq_devices,
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);
void Start(const DiffractionExperiment &experiment, const JFCalibration *calibration);
void Abort();
void Cancel();
JFJochReceiverOutput Stop();
void SetDataProcessingSettings(const DataProcessingSettings& settings);
Plot GetDataProcessingPlot(const PlotRequest& request);
RadialIntegrationProfiles GetRadialIntegrationProfiles();
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 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