// Copyright (2019-2023) Paul Scherrer Institute #include "JFJochBroker.h" #define GRPC_RUN(x) try { {x;} return grpc::Status::OK; } catch (const std::exception& e) { logger.ErrorException(e); return {grpc::StatusCode::ABORTED, e.what()}; } JFJochBroker::JFJochBroker(const DiffractionExperiment &experiment) { state_machine.NotThreadSafe_Experiment() = experiment; } grpc::Status JFJochBroker::Start(grpc::ServerContext *context, const JFJochProtoBuf::DatasetSettings *request, JFJochProtoBuf::Empty *response) { GRPC_RUN( state_machine.Start(*request) ); } grpc::Status JFJochBroker::Stop(grpc::ServerContext *context, const JFJochProtoBuf::Empty *request, JFJochProtoBuf::Empty *response) { GRPC_RUN( state_machine.Stop() ); } grpc::Status JFJochBroker::Pedestal(grpc::ServerContext *context, const JFJochProtoBuf::Empty *request, JFJochProtoBuf::Empty *response) { GRPC_RUN( state_machine.Pedestal() ); } grpc::Status JFJochBroker::Initialize(grpc::ServerContext *context, const JFJochProtoBuf::Empty *request, JFJochProtoBuf::Empty *response) { GRPC_RUN( state_machine.Initialize() ); } grpc::Status JFJochBroker::Cancel(grpc::ServerContext *context, const JFJochProtoBuf::Empty *request, JFJochProtoBuf::Empty *response) { GRPC_RUN( state_machine.Cancel() ); } grpc::Status JFJochBroker::Deactivate(grpc::ServerContext *context, const JFJochProtoBuf::Empty *request, JFJochProtoBuf::Empty *response) { GRPC_RUN( state_machine.Deactivate() ); } grpc::Status JFJochBroker::Trigger(grpc::ServerContext *context, const JFJochProtoBuf::Empty *request, JFJochProtoBuf::Empty *response) { GRPC_RUN( state_machine.Trigger() ); } grpc::Status JFJochBroker::GetStatus(grpc::ServerContext *context, const JFJochProtoBuf::Empty *request, JFJochProtoBuf::BrokerStatus *response) { GRPC_RUN( *response = state_machine.GetStatus() ); } grpc::Status JFJochBroker::GetPlots(grpc::ServerContext *context, const JFJochProtoBuf::PlotRequest *request, JFJochProtoBuf::Plot *response) { GRPC_RUN( *response = state_machine.GetPlots(*request) ); } grpc::Status JFJochBroker::GetRadialIntegrationProfiles(grpc::ServerContext *context, const JFJochProtoBuf::Empty *request, JFJochProtoBuf::RadialIntegrationProfiles *response) { GRPC_RUN( *response = state_machine.GetRadialIntegrationProfiles() ); } grpc::Status JFJochBroker::GetPreview(grpc::ServerContext *context, const JFJochProtoBuf::Empty *request, JFJochProtoBuf::PreviewFrame *response) { GRPC_RUN( *response = services.GetPreviewFrame() ); } grpc::Status JFJochBroker::GetPedestalG0(grpc::ServerContext *context, const JFJochProtoBuf::Empty *request, JFJochProtoBuf::Image *response) { GRPC_RUN( *response = state_machine.GetPedestalG0() ); } grpc::Status JFJochBroker::GetPedestalG1(grpc::ServerContext *context, const JFJochProtoBuf::Empty *request, JFJochProtoBuf::Image *response) { GRPC_RUN( *response = state_machine.GetPedestalG1() ); } grpc::Status JFJochBroker::GetPedestalG2(grpc::ServerContext *context, const JFJochProtoBuf::Empty *request, JFJochProtoBuf::Image *response) { GRPC_RUN( *response = state_machine.GetPedestalG2() ); } grpc::Status JFJochBroker::GetMask(grpc::ServerContext *context, const JFJochProtoBuf::Empty *request, JFJochProtoBuf::Image *response) { GRPC_RUN( *response = state_machine.GetNeXusMask() ); } grpc::Status JFJochBroker::GetDetectorSettings(grpc::ServerContext *context, const JFJochProtoBuf::Empty *request, JFJochProtoBuf::DetectorSettings *response) { GRPC_RUN( *response = state_machine.GetDetectorSettings() ); } grpc::Status JFJochBroker::GetCalibrationStatistics(grpc::ServerContext *context, const JFJochProtoBuf::Empty *request, JFJochProtoBuf::JFCalibrationStatistics *response) { GRPC_RUN( *response = state_machine.GetCalibrationStatistics() ); } grpc::Status JFJochBroker::PutDetectorSettings(grpc::ServerContext *context, const JFJochProtoBuf::DetectorSettings *request, JFJochProtoBuf::Empty *response) { GRPC_RUN( state_machine.SetDetectorSettings(*request) ); } grpc::Status JFJochBroker::GetDataProcessingSettings(::grpc::ServerContext *context, const ::JFJochProtoBuf::Empty *request, ::JFJochProtoBuf::DataProcessingSettings *response) { GRPC_RUN( *response = state_machine.GetDataProcessingSettings() ); } grpc::Status JFJochBroker::PutDataProcessingSettings(::grpc::ServerContext *context, const ::JFJochProtoBuf::DataProcessingSettings *request, ::JFJochProtoBuf::Empty *response) { GRPC_RUN( state_machine.SetDataProcessingSettings(*request) ); } grpc::Status JFJochBroker::GetMeasurementStatistics(grpc::ServerContext *context, const JFJochProtoBuf::Empty *request, JFJochProtoBuf::MeasurementStatistics *response) { GRPC_RUN({ auto stat = state_machine.GetMeasurementStatistics(); if (stat) *response = stat.value(); else *response = JFJochProtoBuf::MeasurementStatistics(); }); } JFJochServices &JFJochBroker::Services() { return services; } void JFJochBroker::AddDetectorSetup(const DetectorSetup &setup) { state_machine.AddDetectorSetup(setup); logger.Info("Added detector {}", setup.GetDescription()); } grpc::Status JFJochBroker::GetDetectorList(grpc::ServerContext *context, const JFJochProtoBuf::Empty *request, JFJochProtoBuf::DetectorList *response) { GRPC_RUN(*response = state_machine.GetDetectorsList() ); } grpc::Status JFJochBroker::SelectDetector(grpc::ServerContext *context, const JFJochProtoBuf::DetectorSelection *request, JFJochProtoBuf::Empty *response) { GRPC_RUN(state_machine.SelectDetector(request->id())); }