SkillProxy.cpp
Go to the documentation of this file.
1 #include "SkillProxy.h"
2 
3 #include <chrono>
4 #include <thread>
5 
7 
8 namespace armarx
9 {
10  namespace skills
11  {
12  SkillProxy::SkillProxy(const manager::dti::SkillManagerInterfacePrx& manager,
13  const SkillID& skillId) :
14  manager(manager)
15  {
17  IceUtil::Optional<manager::dto::SkillDescription> description =
18  manager->getSkillDescription(skillId.toManagerIce());
19  if (description)
20  {
21  skillDescription = SkillDescription::FromIce(description.value());
23  }
24  else
25  {
26  std::stringstream reason;
27  reason << "No skill with ID " << skillId << " found";
28  throw error::SkillNotFoundException(__PRETTY_FUNCTION__, reason.str());
29  }
30  }
31 
32  SkillProxy::SkillProxy(const manager::dti::SkillManagerInterfacePrx& manager,
33  const SkillDescription& skillDesc) :
34  manager(manager), skillDescription(skillDesc)
35  {
38  }
39 
42  {
43  return skillDescription;
44  }
45 
46  SkillID
48  {
50  }
51 
53  SkillProxy::executeSkill(const std::string& executorName,
54  const aron::data::DictPtr& params) const
55  {
57  skills::manager::dto::SkillExecutionRequest req;
58  req.executorName = executorName;
59  req.parameters = aron::data::Dict::ToAronDictDTO(params);
60  req.skillId = skillDescription.skillId.toManagerIce();
61 
62  auto terminatingUpdateIce = manager->executeSkill(req);
63  return TerminatedSkillStatusUpdate::FromIce(terminatingUpdateIce);
64  }
65 
67  SkillProxy::executeSkillAsync(const std::string& executorName,
68  const aron::data::DictPtr& params) const
69  {
71  skills::manager::dto::SkillExecutionRequest req;
72  req.executorName = executorName;
73  req.parameters = aron::data::Dict::ToAronDictDTO(params);
74  req.skillId = skillDescription.skillId.toManagerIce();
75 
76  auto execIdIce = manager->executeSkillAsync(req);
77  return SkillExecutionID::FromIce(execIdIce);
78  }
79 
80  std::optional<TerminatedSkillStatusUpdate>
81  SkillProxy::join(const SkillExecutionID& executionId) const
82  {
84  auto s = this->manager->getSkillExecutionStatus(executionId.toManagerIce());
85 
86  while (s)
87  {
88  auto statusUpdate = skills::SkillStatusUpdate::FromIce(*s);
89 
90  if (statusUpdate.hasBeenTerminated())
91  {
92  break;
93  }
94 
95  std::this_thread::sleep_for(std::chrono::milliseconds(50));
96  s = this->manager->getSkillExecutionStatus(executionId.toManagerIce());
97  }
98 
99  if (!s)
100  {
101  // Either the manager already removed the result (then it is unknown) or the execution id does not exist.
102  return std::nullopt;
103  }
104 
106  }
107 
108  bool
110  {
112  auto r = manager->abortSkill(id.toManagerIce());
113  return r.success;
114  }
115 
116  bool
118  {
120  auto r = manager->abortSkillAsync(id.toManagerIce());
121  return r.success;
122  }
123 
126  {
128  }
129  } // namespace skills
130 } // namespace armarx
armarx::skills::SkillProxy::getRootProfileParameters
aron::data::DictPtr getRootProfileParameters() const
get the default parameters of the skill. TODO: Skill profiles in memory!
Definition: SkillProxy.cpp:125
armarx::skills::SkillProxy::executeSkill
TerminatedSkillStatusUpdate executeSkill(const std::string &executorName, const aron::data::DictPtr &params=nullptr) const
execute a skill and block until skill terminates
Definition: SkillProxy.cpp:53
armarx::skills::SkillExecutionID
Definition: SkillExecutionID.h:15
armarx::skills::TerminatedSkillStatusUpdate::FromIce
static TerminatedSkillStatusUpdate FromIce(const provider::dto::SkillStatusUpdate &update, const std::optional< skills::ProviderID > &providerId=std::nullopt)
Definition: SkillStatusUpdate.cpp:343
skills
This file is part of ArmarX.
Exception.h
armarx::skills::SkillStatusUpdate::FromIce
static SkillStatusUpdate FromIce(const provider::dto::SkillStatusUpdate &update, const std::optional< skills::ProviderID > &providerId=std::nullopt)
Definition: SkillStatusUpdate.cpp:369
armarx::skills::SkillDescription
Definition: SkillDescription.h:17
ARMARX_CHECK_NOT_NULL
#define ARMARX_CHECK_NOT_NULL(ptr)
This macro evaluates whether ptr is not null and if it turns out to be false it will throw an Express...
Definition: ExpressionException.h:206
armarx::skills::error::SkillNotFoundException
Indicates that a skill was not found, e.g., by the skill manager.
Definition: Exception.h:45
armarx::skills::SkillProxy::manager
manager::dti::SkillManagerInterfacePrx manager
Definition: SkillProxy.h:61
armarx::skills::SkillID::toManagerIce
manager::dto::SkillID toManagerIce() const
Definition: SkillID.cpp:55
ARMARX_CHECK
#define ARMARX_CHECK(expression)
Shortcut for ARMARX_CHECK_EXPRESSION.
Definition: ExpressionException.h:82
armarx::skills::SkillExecutionID::toManagerIce
skills::manager::dto::SkillExecutionID toManagerIce() const
Definition: SkillExecutionID.cpp:11
armarx::skills::SkillProxy::skillDescription
SkillDescription skillDescription
Definition: SkillProxy.h:62
armarx::skills::SkillDescription::skillId
SkillID skillId
Definition: SkillDescription.h:19
armarx::skills::SkillProxy::SkillProxy
SkillProxy()=delete
We remove the default constructor as every skill proxy requires a manager.
armarx::aron::data::Dict::ToAronDictDTO
static data::dto::DictPtr ToAronDictDTO(const PointerType &navigator)
Definition: Dict.cpp:140
armarx::skills::SkillDescription::rootProfileDefaults
aron::data::DictPtr rootProfileDefaults
Definition: SkillDescription.h:21
SkillProxy.h
armarx::skills::TerminatedSkillStatusUpdate
Definition: SkillStatusUpdate.h:74
armarx::aron::data::DictPtr
std::shared_ptr< Dict > DictPtr
Definition: Dict.h:41
armarx::skills::SkillProxy::getSkillDescription
SkillDescription getSkillDescription() const
get the skill description
Definition: SkillProxy.cpp:41
armarx::skills::SkillProxy::executeSkillAsync
SkillExecutionID executeSkillAsync(const std::string &executorName, const aron::data::DictPtr &params=nullptr) const
execute a skill. Do not block during execution
Definition: SkillProxy.cpp:67
armarx::skills::SkillExecutionID::FromIce
static SkillExecutionID FromIce(const skills::manager::dto::SkillExecutionID &)
Definition: SkillExecutionID.cpp:31
armarx::skills::SkillProxy::join
std::optional< TerminatedSkillStatusUpdate > join(const SkillExecutionID &executionId) const
poll execution status and block until its null or terminated
Definition: SkillProxy.cpp:81
armarx::skills::SkillProxy::abortSkill
bool abortSkill(const SkillExecutionID &executionId) const
ask skill to abort ASAP. Blocks until skill stopped
Definition: SkillProxy.cpp:109
armarx::skills::SkillDescription::FromIce
static SkillDescription FromIce(const provider::dto::SkillDescription &i, const std::optional< ProviderID > &=std::nullopt)
Definition: SkillDescription.cpp:39
armarx::skills::SkillProxy::abortSkillAsync
bool abortSkillAsync(const SkillExecutionID &executionId) const
ask skill to abort ASAP
Definition: SkillProxy.cpp:117
armarx::skills::SkillID
Definition: SkillID.h:14
armarx::skills::SkillID::isFullySpecified
bool isFullySpecified() const
Definition: SkillID.cpp:78
armarx::ctrlutil::s
double s(double t, double s0, double v0, double a0, double j)
Definition: CtrlUtil.h:33
armarx::skills::SkillProxy::getSkillId
SkillID getSkillId() const
get the skill id from the skill description
Definition: SkillProxy.cpp:47
armarx
This file offers overloads of toIce() and fromIce() functions for STL container types.
Definition: ArmarXTimeserver.cpp:27