SDK: Implement error handling for RequestCommanderInfo

This commit is contained in:
Dennis Klein 2019-07-25 14:42:57 +02:00
parent 363576496d
commit 377eaf2bb8
No known key found for this signature in database
GPG Key ID: 08E62D23FA0ECBBC

View File

@ -226,20 +226,32 @@ auto DDSSession::RequestCommanderInfo() -> CommanderInfo
{ {
dds::tools_api::SCommanderInfoRequestData commanderInfoInfo; dds::tools_api::SCommanderInfoRequestData commanderInfoInfo;
tools::Semaphore blocker; tools::Semaphore blocker;
std::string error;
auto commanderInfoRequest = auto commanderInfoRequest =
dds::tools_api::SCommanderInfoRequest::makeRequest(commanderInfoInfo); dds::tools_api::SCommanderInfoRequest::makeRequest(commanderInfoInfo);
CommanderInfo info; CommanderInfo info;
commanderInfoRequest->setResponseCallback( commanderInfoRequest->setResponseCallback(
[&info](const dds::tools_api::SCommanderInfoResponseData& _response) { [&info](const dds::tools_api::SCommanderInfoResponseData& _response) {
info.pid = _response.m_pid; info.pid = _response.m_pid;
info.activeTopologyName = std::move(_response.m_activeTopologyName); info.activeTopologyName = _response.m_activeTopologyName;
}); });
commanderInfoRequest->setMessageCallback( commanderInfoRequest->setMessageCallback(
[](const dds::tools_api::SMessageResponseData& _message) { LOG(debug) << _message; }); [&](const dds::tools_api::SMessageResponseData& _message) {
if (_message.m_severity == dds::intercom_api::EMsgSeverity::error) {
error = _message.m_msg;
blocker.Signal();
} else {
LOG(debug) << _message;
}
});
commanderInfoRequest->setDoneCallback([&]() { blocker.Signal(); }); commanderInfoRequest->setDoneCallback([&]() { blocker.Signal(); });
fImpl->fSession->sendRequest<dds::tools_api::SCommanderInfoRequest>(commanderInfoRequest); fImpl->fSession->sendRequest<dds::tools_api::SCommanderInfoRequest>(commanderInfoRequest);
blocker.Wait(); blocker.Wait();
if (!error.empty()) {
throw std::runtime_error(error);
}
return info; return info;
} }