mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#4429 Implement return values from the gRPC Command execution
This commit is contained in:
parent
650af20e06
commit
cc031e7895
@ -69,7 +69,7 @@
|
|||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
bool RiaImportEclipseCaseTools::openEclipseCasesFromFile(const QStringList& fileNames, QStringList* openedFiles, bool noDialog)
|
bool RiaImportEclipseCaseTools::openEclipseCasesFromFile(const QStringList& fileNames, FileCaseIdMap* openedFilesOut, bool noDialog)
|
||||||
{
|
{
|
||||||
RiaApplication* app = RiaApplication::instance();
|
RiaApplication* app = RiaApplication::instance();
|
||||||
RimProject* project = app->project();
|
RimProject* project = app->project();
|
||||||
@ -80,12 +80,15 @@ bool RiaImportEclipseCaseTools::openEclipseCasesFromFile(const QStringList& file
|
|||||||
selector.determineFilesToImportFromGridFiles(fileNames);
|
selector.determineFilesToImportFromGridFiles(fileNames);
|
||||||
std::vector<RifSummaryCaseFileResultInfo> summaryFileInfos = selector.summaryFileInfos();
|
std::vector<RifSummaryCaseFileResultInfo> summaryFileInfos = selector.summaryFileInfos();
|
||||||
|
|
||||||
|
FileCaseIdMap openedFiles;
|
||||||
|
|
||||||
// Import eclipse case files
|
// Import eclipse case files
|
||||||
for (const QString& gridCaseFile : selector.gridCaseFiles())
|
for (const QString& gridCaseFile : selector.gridCaseFiles())
|
||||||
{
|
{
|
||||||
if (RiaImportEclipseCaseTools::openEclipseCaseFromFile(gridCaseFile))
|
int caseId = RiaImportEclipseCaseTools::openEclipseCaseFromFile(gridCaseFile);
|
||||||
|
if (caseId >= 0)
|
||||||
{
|
{
|
||||||
if(openedFiles) openedFiles->push_back(gridCaseFile);
|
openedFiles.insert(std::make_pair(gridCaseFile, caseId));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -178,13 +181,18 @@ bool RiaImportEclipseCaseTools::openEclipseCasesFromFile(const QStringList& file
|
|||||||
|
|
||||||
RiuPlotMainWindowTools::refreshToolbars();
|
RiuPlotMainWindowTools::refreshToolbars();
|
||||||
|
|
||||||
return true;
|
if (openedFilesOut)
|
||||||
|
{
|
||||||
|
*openedFilesOut = openedFiles;
|
||||||
|
}
|
||||||
|
|
||||||
|
return !openedFiles.empty();
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
bool RiaImportEclipseCaseTools::openEclipseCaseFromFile(const QString& fileName)
|
int RiaImportEclipseCaseTools::openEclipseCaseFromFile(const QString& fileName)
|
||||||
{
|
{
|
||||||
if (!caf::Utils::fileExists(fileName)) return false;
|
if (!caf::Utils::fileExists(fileName)) return false;
|
||||||
|
|
||||||
@ -198,7 +206,7 @@ bool RiaImportEclipseCaseTools::openEclipseCaseShowTimeStepFilter(const QString&
|
|||||||
{
|
{
|
||||||
if (!caf::Utils::fileExists(fileName)) return false;
|
if (!caf::Utils::fileExists(fileName)) return false;
|
||||||
|
|
||||||
return RiaImportEclipseCaseTools::openEclipseCaseShowTimeStepFilterImpl(fileName, true);
|
return RiaImportEclipseCaseTools::openEclipseCaseShowTimeStepFilterImpl(fileName, true) >= 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
@ -259,7 +267,7 @@ bool RiaImportEclipseCaseTools::openMockModel(const QString& name)
|
|||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
bool RiaImportEclipseCaseTools::openEclipseCaseShowTimeStepFilterImpl(const QString& fileName, bool showTimeStepFilter)
|
int RiaImportEclipseCaseTools::openEclipseCaseShowTimeStepFilterImpl(const QString& fileName, bool showTimeStepFilter)
|
||||||
{
|
{
|
||||||
QFileInfo gridFileName(fileName);
|
QFileInfo gridFileName(fileName);
|
||||||
QString caseName = gridFileName.completeBaseName();
|
QString caseName = gridFileName.completeBaseName();
|
||||||
@ -274,7 +282,7 @@ bool RiaImportEclipseCaseTools::openEclipseCaseShowTimeStepFilterImpl(const QStr
|
|||||||
if (analysisModels == nullptr)
|
if (analysisModels == nullptr)
|
||||||
{
|
{
|
||||||
delete rimResultReservoir;
|
delete rimResultReservoir;
|
||||||
return false;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (RiaGuiApplication::isRunning())
|
if (RiaGuiApplication::isRunning())
|
||||||
@ -290,7 +298,7 @@ bool RiaImportEclipseCaseTools::openEclipseCaseShowTimeStepFilterImpl(const QStr
|
|||||||
|
|
||||||
delete rimResultReservoir;
|
delete rimResultReservoir;
|
||||||
|
|
||||||
return false;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
RimEclipseView* riv = rimResultReservoir->createAndAddReservoirView();
|
RimEclipseView* riv = rimResultReservoir->createAndAddReservoirView();
|
||||||
@ -306,7 +314,7 @@ bool RiaImportEclipseCaseTools::openEclipseCaseShowTimeStepFilterImpl(const QStr
|
|||||||
|
|
||||||
RiuMainWindow::instance()->selectAsCurrentItem(riv->cellResult());
|
RiuMainWindow::instance()->selectAsCurrentItem(riv->cellResult());
|
||||||
|
|
||||||
return true;
|
return rimResultReservoir->caseId();
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
@ -18,6 +18,8 @@
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <map>
|
||||||
|
|
||||||
class QString;
|
class QString;
|
||||||
class QStringList;
|
class QStringList;
|
||||||
|
|
||||||
@ -27,7 +29,9 @@ class QStringList;
|
|||||||
class RiaImportEclipseCaseTools
|
class RiaImportEclipseCaseTools
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
static bool openEclipseCasesFromFile(const QStringList& fileNames, QStringList* openedFiles = nullptr, bool noDialog = false);
|
typedef std::map<QString, int> FileCaseIdMap;
|
||||||
|
|
||||||
|
static bool openEclipseCasesFromFile(const QStringList& fileNames, FileCaseIdMap* openedFilesOut = nullptr, bool noDialog = false);
|
||||||
static bool openEclipseCaseShowTimeStepFilter(const QString& fileName);
|
static bool openEclipseCaseShowTimeStepFilter(const QString& fileName);
|
||||||
|
|
||||||
static bool openEclipseInputCaseFromFileNames(const QStringList& fileNames, QString* fileContainingGrid = nullptr);
|
static bool openEclipseInputCaseFromFileNames(const QStringList& fileNames, QString* fileContainingGrid = nullptr);
|
||||||
@ -36,7 +40,7 @@ public:
|
|||||||
static bool addEclipseCases(const QStringList& fileNames);
|
static bool addEclipseCases(const QStringList& fileNames);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static bool openEclipseCaseFromFile(const QString& fileName);
|
static int openEclipseCaseFromFile(const QString& fileName);
|
||||||
static bool openEclipseCaseShowTimeStepFilterImpl(const QString& fileName, bool showTimeStepFilter);
|
static int openEclipseCaseShowTimeStepFilterImpl(const QString& fileName, bool showTimeStepFilter);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -24,6 +24,17 @@
|
|||||||
|
|
||||||
#include <QStringList>
|
#include <QStringList>
|
||||||
|
|
||||||
|
CAF_PDM_SOURCE_INIT(RicfLoadCaseResult, "loadCaseResult");
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
RicfLoadCaseResult::RicfLoadCaseResult(int caseId)
|
||||||
|
{
|
||||||
|
CAF_PDM_InitObject("case_result", "", "", "");
|
||||||
|
CAF_PDM_InitField(&this->caseId, "id", caseId, "", "", "", "");
|
||||||
|
}
|
||||||
|
|
||||||
CAF_PDM_SOURCE_INIT(RicfLoadCase, "loadCase");
|
CAF_PDM_SOURCE_INIT(RicfLoadCase, "loadCase");
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
@ -39,12 +50,17 @@ RicfLoadCase::RicfLoadCase()
|
|||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
RicfCommandResponse RicfLoadCase::execute()
|
RicfCommandResponse RicfLoadCase::execute()
|
||||||
{
|
{
|
||||||
bool ok = RiaImportEclipseCaseTools::openEclipseCasesFromFile(QStringList({m_path()}), nullptr, true);
|
RiaImportEclipseCaseTools::FileCaseIdMap fileCaseIdMap;
|
||||||
|
bool ok = RiaImportEclipseCaseTools::openEclipseCasesFromFile(QStringList({m_path()}), &fileCaseIdMap, true);
|
||||||
if (!ok)
|
if (!ok)
|
||||||
{
|
{
|
||||||
QString error = QString("loadCase: Unable to load case from %1").arg(m_path());
|
QString error = QString("loadCase: Unable to load case from %1").arg(m_path());
|
||||||
RiaLogging::error(error);
|
RiaLogging::error(error);
|
||||||
return RicfCommandResponse(RicfCommandResponse::COMMAND_ERROR, error);
|
return RicfCommandResponse(RicfCommandResponse::COMMAND_ERROR, error);
|
||||||
}
|
}
|
||||||
return RicfCommandResponse();
|
CAF_ASSERT(fileCaseIdMap.size() == 1u);
|
||||||
|
RicfLoadCaseResult result;
|
||||||
|
RicfCommandResponse response;
|
||||||
|
response.setResult(new RicfLoadCaseResult(fileCaseIdMap.begin()->second));
|
||||||
|
return response;
|
||||||
}
|
}
|
||||||
|
@ -22,6 +22,15 @@
|
|||||||
|
|
||||||
#include "cafPdmField.h"
|
#include "cafPdmField.h"
|
||||||
|
|
||||||
|
class RicfLoadCaseResult : public caf::PdmObject
|
||||||
|
{
|
||||||
|
CAF_PDM_HEADER_INIT;
|
||||||
|
public:
|
||||||
|
RicfLoadCaseResult(int caseId = -1);
|
||||||
|
public:
|
||||||
|
caf::PdmField<int> caseId;
|
||||||
|
};
|
||||||
|
|
||||||
//==================================================================================================
|
//==================================================================================================
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
|
@ -68,12 +68,12 @@ void RicImportEclipseCasesFeature::onActionTriggered(bool isChecked)
|
|||||||
// Remember the path to next time
|
// Remember the path to next time
|
||||||
app->setLastUsedDialogDirectory("BINARY_GRID", QFileInfo(result.rootDir).absoluteFilePath());
|
app->setLastUsedDialogDirectory("BINARY_GRID", QFileInfo(result.rootDir).absoluteFilePath());
|
||||||
|
|
||||||
QStringList newCaseFiles;
|
RiaImportEclipseCaseTools::FileCaseIdMap newCaseFiles;
|
||||||
RiaImportEclipseCaseTools::openEclipseCasesFromFile(result.files, &newCaseFiles);
|
RiaImportEclipseCaseTools::openEclipseCasesFromFile(result.files, &newCaseFiles);
|
||||||
|
|
||||||
for (const auto newCaseFile : newCaseFiles)
|
for (const auto newCaseFileAndId : newCaseFiles)
|
||||||
{
|
{
|
||||||
RiaApplication::instance()->addToRecentFiles(newCaseFile);
|
RiaApplication::instance()->addToRecentFiles(newCaseFileAndId.first);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -184,12 +184,12 @@ void RicImportGeneralDataFeature::openFileDialog(ImportFileType fileTypes)
|
|||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
bool RicImportGeneralDataFeature::openEclipseCaseFromFileNames(const QStringList& fileNames)
|
bool RicImportGeneralDataFeature::openEclipseCaseFromFileNames(const QStringList& fileNames)
|
||||||
{
|
{
|
||||||
QStringList newCaseFiles;
|
RiaImportEclipseCaseTools::FileCaseIdMap newCaseFiles;
|
||||||
if (RiaImportEclipseCaseTools::openEclipseCasesFromFile(fileNames, &newCaseFiles))
|
if (RiaImportEclipseCaseTools::openEclipseCasesFromFile(fileNames, &newCaseFiles))
|
||||||
{
|
{
|
||||||
for (const auto newCaseFile : newCaseFiles)
|
for (const auto newCaseFileAndId : newCaseFiles)
|
||||||
{
|
{
|
||||||
RiaApplication::instance()->addToRecentFiles(newCaseFile);
|
RiaApplication::instance()->addToRecentFiles(newCaseFileAndId.first);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -1,12 +1,13 @@
|
|||||||
syntax = "proto3";
|
syntax = "proto3";
|
||||||
|
|
||||||
|
import "CaseInfo.proto";
|
||||||
import "Empty.proto";
|
import "Empty.proto";
|
||||||
|
|
||||||
package rips;
|
package rips;
|
||||||
|
|
||||||
service Commands
|
service Commands
|
||||||
{
|
{
|
||||||
rpc Execute(CommandParams) returns(Empty) {}
|
rpc Execute(CommandParams) returns(CommandReply) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
message SetTimeStepParams
|
message SetTimeStepParams
|
||||||
@ -58,3 +59,12 @@ message CommandParams
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
message CommandReply
|
||||||
|
{
|
||||||
|
oneof result
|
||||||
|
{
|
||||||
|
Empty emptyResult = 1;
|
||||||
|
Case loadCaseResult = 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -39,7 +39,7 @@ using namespace google::protobuf;
|
|||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
grpc::Status RiaGrpcCommandService::Execute(grpc::ServerContext* context, const CommandParams* request, Empty* reply)
|
grpc::Status RiaGrpcCommandService::Execute(grpc::ServerContext* context, const CommandParams* request, CommandReply* reply)
|
||||||
{
|
{
|
||||||
auto requestDescriptor = request->GetDescriptor();
|
auto requestDescriptor = request->GetDescriptor();
|
||||||
RiaLogging::info(QString::fromStdString(requestDescriptor->name()));
|
RiaLogging::info(QString::fromStdString(requestDescriptor->name()));
|
||||||
@ -69,19 +69,22 @@ grpc::Status RiaGrpcCommandService::Execute(grpc::ServerContext* context, const
|
|||||||
if (pdmValueFieldHandle)
|
if (pdmValueFieldHandle)
|
||||||
{
|
{
|
||||||
RiaLogging::info(QString("Found Matching Parameter: %1").arg(parameterName));
|
RiaLogging::info(QString("Found Matching Parameter: %1").arg(parameterName));
|
||||||
assignFieldValue(pdmValueFieldHandle, params, parameter);
|
assignPdmFieldValue(pdmValueFieldHandle, params, parameter);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
RicfCommandResponse response = commandHandle->execute();
|
RicfCommandResponse response = commandHandle->execute();
|
||||||
if (response.status() == RicfCommandResponse::COMMAND_ERROR)
|
if (response.status() == RicfCommandResponse::COMMAND_ERROR)
|
||||||
{
|
{
|
||||||
return grpc::Status(grpc::FAILED_PRECONDITION, response.message().toStdString());
|
return grpc::Status(grpc::FAILED_PRECONDITION, response.message().toStdString());
|
||||||
}
|
}
|
||||||
else if (response.status() == RicfCommandResponse::COMMAND_WARNING)
|
else if (response.status() == RicfCommandResponse::COMMAND_WARNING)
|
||||||
{
|
{
|
||||||
context->AddInitialMetadata("warning", response.message().toStdString());
|
context->AddInitialMetadata("warning", response.message().toStdString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
assignResultToReply(response.result(), reply);
|
||||||
|
|
||||||
return Status::OK;
|
return Status::OK;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -95,15 +98,15 @@ std::vector<RiaAbstractGrpcCallback*> RiaGrpcCommandService::createCallbacks()
|
|||||||
{
|
{
|
||||||
typedef RiaGrpcCommandService Self;
|
typedef RiaGrpcCommandService Self;
|
||||||
|
|
||||||
return {new RiaGrpcCallback<Self, CommandParams, Empty>(this, &Self::Execute, &Self::RequestExecute)};
|
return {new RiaGrpcCallback<Self, CommandParams, CommandReply>(this, &Self::Execute, &Self::RequestExecute)};
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
void RiaGrpcCommandService::assignFieldValue(caf::PdmValueField* pdmValueField,
|
void RiaGrpcCommandService::assignPdmFieldValue(caf::PdmValueField* pdmValueField,
|
||||||
const Message& params,
|
const Message& params,
|
||||||
const FieldDescriptor* paramDescriptor)
|
const FieldDescriptor* paramDescriptor)
|
||||||
{
|
{
|
||||||
FieldDescriptor::Type fieldDataType = paramDescriptor->type();
|
FieldDescriptor::Type fieldDataType = paramDescriptor->type();
|
||||||
QVariant qValue;
|
QVariant qValue;
|
||||||
@ -116,7 +119,7 @@ void RiaGrpcCommandService::assignFieldValue(caf::PdmValueField* pdmValueFiel
|
|||||||
}
|
}
|
||||||
case FieldDescriptor::TYPE_INT32: {
|
case FieldDescriptor::TYPE_INT32: {
|
||||||
int value = params.GetReflection()->GetInt32(params, paramDescriptor);
|
int value = params.GetReflection()->GetInt32(params, paramDescriptor);
|
||||||
qValue = QVariant(value);
|
qValue = QVariant(value);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case FieldDescriptor::TYPE_UINT32: {
|
case FieldDescriptor::TYPE_UINT32: {
|
||||||
@ -126,12 +129,12 @@ void RiaGrpcCommandService::assignFieldValue(caf::PdmValueField* pdmValueFiel
|
|||||||
}
|
}
|
||||||
case FieldDescriptor::TYPE_INT64: {
|
case FieldDescriptor::TYPE_INT64: {
|
||||||
int64_t value = params.GetReflection()->GetInt64(params, paramDescriptor);
|
int64_t value = params.GetReflection()->GetInt64(params, paramDescriptor);
|
||||||
qValue = QVariant((qlonglong) value);
|
qValue = QVariant((qlonglong)value);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case FieldDescriptor::TYPE_UINT64: {
|
case FieldDescriptor::TYPE_UINT64: {
|
||||||
uint64_t value = params.GetReflection()->GetUInt64(params, paramDescriptor);
|
uint64_t value = params.GetReflection()->GetUInt64(params, paramDescriptor);
|
||||||
qValue = QVariant((qulonglong) value);
|
qValue = QVariant((qulonglong)value);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case FieldDescriptor::TYPE_STRING: {
|
case FieldDescriptor::TYPE_STRING: {
|
||||||
@ -158,5 +161,95 @@ void RiaGrpcCommandService::assignFieldValue(caf::PdmValueField* pdmValueFiel
|
|||||||
pdmValueField->setFromQVariant(qValue);
|
pdmValueField->setFromQVariant(qValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
void RiaGrpcCommandService::assignGrpcFieldValue(google::protobuf::Message* reply,
|
||||||
|
const google::protobuf::FieldDescriptor* fieldDescriptor,
|
||||||
|
const caf::PdmValueField* pdmValueField)
|
||||||
|
{
|
||||||
|
FieldDescriptor::Type fieldDataType = fieldDescriptor->type();
|
||||||
|
QVariant qValue = pdmValueField->toQVariant();
|
||||||
|
switch (fieldDataType)
|
||||||
|
{
|
||||||
|
case FieldDescriptor::TYPE_BOOL: {
|
||||||
|
reply->GetReflection()->SetBool(reply, fieldDescriptor, qValue.toBool());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case FieldDescriptor::TYPE_INT32: {
|
||||||
|
reply->GetReflection()->SetInt32(reply, fieldDescriptor, qValue.toInt());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case FieldDescriptor::TYPE_UINT32: {
|
||||||
|
reply->GetReflection()->SetUInt32(reply, fieldDescriptor, qValue.toUInt());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case FieldDescriptor::TYPE_INT64: {
|
||||||
|
reply->GetReflection()->SetInt64(reply, fieldDescriptor, qValue.toLongLong());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case FieldDescriptor::TYPE_UINT64: {
|
||||||
|
reply->GetReflection()->SetUInt64(reply, fieldDescriptor, qValue.toULongLong());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case FieldDescriptor::TYPE_STRING: {
|
||||||
|
reply->GetReflection()->SetString(reply, fieldDescriptor, qValue.toString().toStdString());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case FieldDescriptor::TYPE_FLOAT: {
|
||||||
|
reply->GetReflection()->SetFloat(reply, fieldDescriptor, qValue.toFloat());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case FieldDescriptor::TYPE_DOUBLE: {
|
||||||
|
reply->GetReflection()->SetDouble(reply, fieldDescriptor, qValue.toDouble());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case FieldDescriptor::TYPE_ENUM: {
|
||||||
|
reply->GetReflection()->SetEnumValue(reply, fieldDescriptor, qValue.toInt());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
void RiaGrpcCommandService::assignResultToReply(const caf::PdmObject* result, CommandReply* reply)
|
||||||
|
{
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
reply->set_allocated_emptyresult(new Empty);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString resultType = result->classKeyword();
|
||||||
|
|
||||||
|
auto replyDescriptor = reply->GetDescriptor();
|
||||||
|
auto oneofDescriptor = replyDescriptor->FindOneofByName("result");
|
||||||
|
const FieldDescriptor* matchingOneOf = nullptr;
|
||||||
|
for (int fieldIndex = 0; fieldIndex < oneofDescriptor->field_count(); ++fieldIndex)
|
||||||
|
{
|
||||||
|
auto fieldDescriptor = oneofDescriptor->field(fieldIndex);
|
||||||
|
if (fieldDescriptor->name() == resultType.toStdString())
|
||||||
|
{
|
||||||
|
matchingOneOf = fieldDescriptor;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
CAF_ASSERT(matchingOneOf);
|
||||||
|
Message* message = reply->GetReflection()->MutableMessage(reply, matchingOneOf);
|
||||||
|
CAF_ASSERT(message);
|
||||||
|
auto resultDescriptor = message->GetDescriptor();
|
||||||
|
|
||||||
|
for (int fieldIndex = 0; fieldIndex < resultDescriptor->field_count(); ++fieldIndex)
|
||||||
|
{
|
||||||
|
auto fieldDescriptor = resultDescriptor->field(fieldIndex);
|
||||||
|
const auto pdmField =
|
||||||
|
dynamic_cast<const caf::PdmValueField*>(result->findField(QString::fromStdString(fieldDescriptor->name())));
|
||||||
|
assignGrpcFieldValue(message, fieldDescriptor, pdmField);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static bool RiaGrpcCommandService_init =
|
static bool RiaGrpcCommandService_init =
|
||||||
RiaGrpcServiceFactory::instance()->registerCreator<RiaGrpcCommandService>(typeid(RiaGrpcCommandService).hash_code());
|
RiaGrpcServiceFactory::instance()->registerCreator<RiaGrpcCommandService>(typeid(RiaGrpcCommandService).hash_code());
|
||||||
|
@ -24,14 +24,10 @@
|
|||||||
#include <grpcpp/grpcpp.h>
|
#include <grpcpp/grpcpp.h>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
namespace rips
|
|
||||||
{
|
|
||||||
class Empty;
|
|
||||||
}
|
|
||||||
|
|
||||||
namespace caf
|
namespace caf
|
||||||
{
|
{
|
||||||
class PdmValueField;
|
class PdmValueField;
|
||||||
|
class PdmObject;
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace google
|
namespace google
|
||||||
@ -48,11 +44,15 @@ class RiaAbstractGrpcCallback;
|
|||||||
class RiaGrpcCommandService : public rips::Commands::AsyncService, public RiaGrpcServiceInterface
|
class RiaGrpcCommandService : public rips::Commands::AsyncService, public RiaGrpcServiceInterface
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
grpc::Status Execute(grpc::ServerContext* context, const rips::CommandParams* request, rips::Empty* reply) override;
|
grpc::Status Execute(grpc::ServerContext* context, const rips::CommandParams* request, rips::CommandReply* reply) override;
|
||||||
std::vector<RiaAbstractGrpcCallback*> createCallbacks() override;
|
std::vector<RiaAbstractGrpcCallback*> createCallbacks() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void assignFieldValue(caf::PdmValueField* pdmValueField,
|
void assignPdmFieldValue(caf::PdmValueField* pdmValueField,
|
||||||
const google::protobuf::Message& params,
|
const google::protobuf::Message& params,
|
||||||
const google::protobuf::FieldDescriptor* paramDescriptor);
|
const google::protobuf::FieldDescriptor* paramDescriptor);
|
||||||
|
void assignGrpcFieldValue(google::protobuf::Message* reply,
|
||||||
|
const google::protobuf::FieldDescriptor* fieldDescriptor,
|
||||||
|
const caf::PdmValueField* pdmValueField);
|
||||||
|
void assignResultToReply(const caf::PdmObject* result, rips::CommandReply* reply);
|
||||||
};
|
};
|
||||||
|
@ -44,7 +44,7 @@ class CommandExecutor:
|
|||||||
|
|
||||||
def execute(self, commandParams):
|
def execute(self, commandParams):
|
||||||
try:
|
try:
|
||||||
self.commands.Execute(commandParams)
|
return self.commands.Execute(commandParams)
|
||||||
except grpc.RpcError as e:
|
except grpc.RpcError as e:
|
||||||
if e.code() == grpc.StatusCode.NOT_FOUND:
|
if e.code() == grpc.StatusCode.NOT_FOUND:
|
||||||
print("Command not found")
|
print("Command not found")
|
||||||
@ -61,7 +61,9 @@ class CommandExecutor:
|
|||||||
return self.execute(Commands_pb2.CommandParams(openProject=Commands_pb2.FilePathRequest(path=path)))
|
return self.execute(Commands_pb2.CommandParams(openProject=Commands_pb2.FilePathRequest(path=path)))
|
||||||
|
|
||||||
def loadCase(self, path):
|
def loadCase(self, path):
|
||||||
return self.execute(Commands_pb2.CommandParams(loadCase=Commands_pb2.FilePathRequest(path=path)))
|
commandReply = self.execute(Commands_pb2.CommandParams(loadCase=Commands_pb2.FilePathRequest(path=path)))
|
||||||
|
assert commandReply.HasField("loadCaseResult")
|
||||||
|
return commandReply.loadCaseResult.id
|
||||||
|
|
||||||
def closeProject(self):
|
def closeProject(self):
|
||||||
return self.execute(Commands_pb2.CommandParams(closeProject=Empty()))
|
return self.execute(Commands_pb2.CommandParams(closeProject=Empty()))
|
||||||
|
Loading…
Reference in New Issue
Block a user