145 lines
6.7 KiB
C++
145 lines
6.7 KiB
C++
// Copyright (2019-2022) Paul Scherrer Institute
|
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
|
|
#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()));
|
|
}
|