SkillProviderComponentPlugin.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <experimental/memory>
4 #include <shared_mutex>
5 
9 
10 #include <RobotAPI/interface/skills/SkillManagerInterface.h>
14 
15 #include "LambdaSkill.h"
17 
18 namespace armarx
19 {
20  class SkillProviderComponentPluginUser; // forward declaration
21 }
22 
23 namespace armarx::plugins
24 {
26  {
27  public:
28  using ComponentPlugin::ComponentPlugin;
29 
30  void preOnInitComponent() override;
31 
32  void preOnConnectComponent() override;
33  void postOnConnectComponent() override;
34 
35  void postCreatePropertyDefinitions(PropertyDefinitionsPtr& properties) override;
36 
37  void preOnDisconnectComponent() override;
38 
39  void addSkillFactory(std::unique_ptr<skills::SkillBlueprint>&&);
40 
43 
44  template <class SkillT, typename... Args>
45 
46  requires skills::isSkill<SkillT>
48  addSkillFactory(Args&&... args)
49  {
50  auto fac = skills::SkillBlueprint::ForSkill<SkillT>(std::forward<Args>(args)...);
51  auto* facPtr = fac.get();
52  addSkillFactory(std::move(fac));
53  return static_cast<skills::SkillBlueprint*>(facPtr);
54  }
55 
56  template <typename FactoryT, typename... Args>
57 
58  requires skills::isSkillBlueprint<FactoryT>
59  FactoryT*
60  addCustomSkillFactory(Args&&... args)
61  {
62  auto fac = std::make_unique<FactoryT>(std::forward<Args>(args)...);
63  auto* facPtr = fac.get();
64  addSkillFactory(std::move(fac));
65  return static_cast<FactoryT*>(facPtr);
66  }
67 
68  // Ice forwards
69  std::optional<skills::SkillStatusUpdate>
71  std::map<skills::SkillExecutionID, skills::SkillStatusUpdate>
73 
74  std::optional<skills::SkillDescription> getSkillDescription(const skills::SkillID&) const;
75  std::map<skills::SkillID, skills::SkillDescription> getSkillDescriptions() const;
76 
78 
81 
83  const armarx::aron::data::DictPtr& params);
84 
85  bool abortSkill(const skills::SkillExecutionID& execId);
86 
87  bool abortSkillAsync(const skills::SkillExecutionID& execId);
88 
89  private:
90  skills::SkillBlueprint* getSkillFactory(const armarx::skills::SkillID& name);
91 
92 
93  skills::manager::dti::SkillManagerInterfacePrx manager;
94  skills::provider::dti::SkillProviderInterfacePrx myPrx;
95 
96  mutable std::shared_mutex skillFactoriesMutex;
97  std::map<skills::SkillID, std::unique_ptr<skills::SkillBlueprint>> skillFactories;
98 
99  mutable std::shared_mutex skillExecutionsMutex;
100  std::map<skills::SkillExecutionID, skills::detail::SkillRuntime> skillExecutions;
101 
103  };
104 } // namespace armarx::plugins
105 
106 namespace armarx
107 
108 {
110  virtual public ManagedIceObject,
111  virtual public skills::provider::dti::SkillProviderInterface
112  {
113  public:
115 
116  // Ice Implementations
117  IceUtil::Optional<skills::provider::dto::SkillDescription>
118  getSkillDescription(const skills::provider::dto::SkillID& skill,
119  const Ice::Current& current = Ice::Current()) override;
120 
121  skills::provider::dto::SkillDescriptionMap
122  getSkillDescriptions(const Ice::Current& current = Ice::Current()) override;
123 
124  IceUtil::Optional<skills::provider::dto::SkillStatusUpdate>
125  getSkillExecutionStatus(const skills::provider::dto::SkillExecutionID& executionId,
126  const Ice::Current& current = Ice::Current()) override;
127 
128  skills::provider::dto::SkillStatusUpdateMap
129  getSkillExecutionStatuses(const Ice::Current& current = Ice::Current()) override;
130 
131  skills::provider::dto::SkillStatusUpdate
132  executeSkill(const skills::provider::dto::SkillExecutionRequest& executionInfo,
133  const Ice::Current& current = Ice::Current()) override;
134 
135  skills::provider::dto::SkillExecutionID
136  executeSkillAsync(const skills::provider::dto::SkillExecutionRequest& executionInfo,
137  const Ice::Current& current = Ice::Current()) override;
138 
139  skills::provider::dto::ParameterUpdateResult
140  updateSkillParameters(const skills::provider::dto::SkillExecutionID& executionId,
141  const armarx::aron::data::dto::DictPtr& parameters,
142  const Ice::Current& current = Ice::Current()) override;
143 
144  skills::provider::dto::AbortSkillResult
145  abortSkill(const skills::provider::dto::SkillExecutionID& skill,
146  const Ice::Current& current = Ice::Current()) override;
147 
148  skills::provider::dto::AbortSkillResult
149  abortSkillAsync(const skills::provider::dto::SkillExecutionID& skill,
150  const Ice::Current& current = Ice::Current()) override;
151 
152  // Plugin
154  getSkillProviderPlugin() const;
155 
156  protected:
157  // -----------------------------------------------------------------------------------------
158  // New
159  // -----------------------------------------------------------------------------------------
163  {
164  auto ret = plugin->addSkillFactory(desc, f);
165  return ret;
166  }
167 
168  template <class SkillT, typename... Args>
169 
170  requires skills::isSkill<SkillT>
172  addSkillFactory(Args&&... args)
173  {
174  return plugin->addSkillFactory<SkillT>(std::forward<Args>(args)...);
175  }
176 
177  template <typename FacT, typename... Args>
178 
179  requires skills::isSkillBlueprint<FacT>
180  FacT*
181  addCustomSkillFactory(Args&&... args)
182  {
183  return plugin->addCustomSkillFactory<FacT>(std::forward<Args>(args)...);
184  }
185 
186  private:
188  };
189 } // namespace armarx
armarx::skills::SkillExecutionID
Definition: SkillExecutionID.h:15
armarx::SkillProviderComponentPluginUser::getSkillProviderPlugin
const std::experimental::observer_ptr< plugins::SkillProviderComponentPlugin > & getSkillProviderPlugin() const
Definition: SkillProviderComponentPlugin.cpp:538
armarx::aron::ret
ReaderT::InputType T & ret
Definition: rw.h:13
armarx::plugins::SkillProviderComponentPlugin::preOnDisconnectComponent
void preOnDisconnectComponent() override
Definition: SkillProviderComponentPlugin.cpp:38
armarx::SkillProviderComponentPluginUser::getSkillDescriptions
skills::provider::dto::SkillDescriptionMap getSkillDescriptions(const Ice::Current &current=Ice::Current()) override
Definition: SkillProviderComponentPlugin.cpp:440
armarx::SkillProviderComponentPluginUser::getSkillDescription
IceUtil::Optional< skills::provider::dto::SkillDescription > getSkillDescription(const skills::provider::dto::SkillID &skill, const Ice::Current &current=Ice::Current()) override
Definition: SkillProviderComponentPlugin.cpp:426
armarx::plugins::SkillProviderComponentPlugin::getSkillDescription
std::optional< skills::SkillDescription > getSkillDescription(const skills::SkillID &) const
Definition: SkillProviderComponentPlugin.cpp:157
armarx::plugins::SkillProviderComponentPlugin::executeSkill
skills::SkillStatusUpdate executeSkill(const skills::SkillExecutionRequest &executionInfo)
Definition: SkillProviderComponentPlugin.cpp:195
armarx::plugins::SkillProviderComponentPlugin::preOnConnectComponent
void preOnConnectComponent() override
Definition: SkillProviderComponentPlugin.cpp:16
armarx::plugins::SkillProviderComponentPlugin::addSkillFactory
void addSkillFactory(std::unique_ptr< skills::SkillBlueprint > &&)
Definition: SkillProviderComponentPlugin.cpp:63
armarx::skills::SkillDescription
Definition: SkillDescription.h:17
armarx::plugins::SkillProviderComponentPlugin::addSkillFactory
requires skills::isSkill< SkillT > skills::SkillBlueprint * addSkillFactory(Args &&... args)
Definition: SkillProviderComponentPlugin.h:48
armarx::SkillProviderComponentPluginUser::updateSkillParameters
skills::provider::dto::ParameterUpdateResult updateSkillParameters(const skills::provider::dto::SkillExecutionID &executionId, const armarx::aron::data::dto::DictPtr &parameters, const Ice::Current &current=Ice::Current()) override
Definition: SkillProviderComponentPlugin.cpp:500
LambdaSkill.h
SkillImplementationWrapper.h
armarx::requires
requires(!aron::detail::DtoAndBoAreSame< DtoT, BoT >) void toAron(std
Definition: aron_conversions.h:363
armarx::skills::LambdaSkill::FunctionType
std::function< TerminatedSkillStatus()> FunctionType
Definition: LambdaSkill.h:12
armarx::SkillProviderComponentPluginUser::abortSkillAsync
skills::provider::dto::AbortSkillResult abortSkillAsync(const skills::provider::dto::SkillExecutionID &skill, const Ice::Current &current=Ice::Current()) override
Definition: SkillProviderComponentPlugin.cpp:526
armarx::SkillProviderComponentPluginUser::executeSkillAsync
skills::provider::dto::SkillExecutionID executeSkillAsync(const skills::provider::dto::SkillExecutionRequest &executionInfo, const Ice::Current &current=Ice::Current()) override
Definition: SkillProviderComponentPlugin.cpp:489
RunningTask.h
std::experimental::fundamentals_v2::observer_ptr
Definition: ManagedIceObject.h:53
Dict.h
armarx::plugins::SkillProviderComponentPlugin::abortSkillAsync
bool abortSkillAsync(const skills::SkillExecutionID &execId)
Definition: SkillProviderComponentPlugin.cpp:399
armarx::plugins::SkillProviderComponentPlugin
Definition: SkillProviderComponentPlugin.h:25
armarx::plugins::SkillProviderComponentPlugin::getSkillExecutionStatus
std::optional< skills::SkillStatusUpdate > getSkillExecutionStatus(const skills::SkillExecutionID &) const
Definition: SkillProviderComponentPlugin.cpp:125
IceInternal::Handle
Definition: forward_declarations.h:8
armarx::skills::SkillExecutionRequest
Definition: SkillExecutionRequest.h:13
armarx::SkillProviderComponentPluginUser
Definition: SkillProviderComponentPlugin.h:109
armarx::plugins::SkillProviderComponentPlugin::abortSkill
bool abortSkill(const skills::SkillExecutionID &execId)
Definition: SkillProviderComponentPlugin.cpp:365
armarx::plugins::SkillProviderComponentPlugin::updateSkillParameters
bool updateSkillParameters(const skills::SkillExecutionID &id, const armarx::aron::data::DictPtr &params)
Definition: SkillProviderComponentPlugin.cpp:338
armarx::skills::SkillStatusUpdate
Definition: SkillStatusUpdate.h:116
ManagedIceObject.h
Skill.h
armarx::plugins
This file is part of ArmarX.
Definition: DebugObserverComponentPlugin.cpp:27
armarx::ComponentPlugin
Definition: ComponentPlugin.h:37
armarx::plugins::SkillProviderComponentPlugin::postOnConnectComponent
void postOnConnectComponent() override
Definition: SkillProviderComponentPlugin.cpp:23
armarx::SkillProviderComponentPluginUser::abortSkill
skills::provider::dto::AbortSkillResult abortSkill(const skills::provider::dto::SkillExecutionID &skill, const Ice::Current &current=Ice::Current()) override
Definition: SkillProviderComponentPlugin.cpp:515
armarx::SkillProviderComponentPluginUser::executeSkill
skills::provider::dto::SkillStatusUpdate executeSkill(const skills::provider::dto::SkillExecutionRequest &executionInfo, const Ice::Current &current=Ice::Current()) override
Definition: SkillProviderComponentPlugin.cpp:478
armarx::SkillProviderComponentPluginUser::addCustomSkillFactory
requires skills::isSkillBlueprint< FacT > FacT * addCustomSkillFactory(Args &&... args)
Definition: SkillProviderComponentPlugin.h:181
armarx::plugins::SkillProviderComponentPlugin::getSkillDescriptions
std::map< skills::SkillID, skills::SkillDescription > getSkillDescriptions() const
Definition: SkillProviderComponentPlugin.cpp:182
armarx::SkillProviderComponentPluginUser::getSkillExecutionStatus
IceUtil::Optional< skills::provider::dto::SkillStatusUpdate > getSkillExecutionStatus(const skills::provider::dto::SkillExecutionID &executionId, const Ice::Current &current=Ice::Current()) override
Definition: SkillProviderComponentPlugin.cpp:451
armarx::SkillProviderComponentPluginUser::addSkillFactory
skills::SkillBlueprint * addSkillFactory(const skills::SkillDescription &desc, const skills::LambdaSkill::FunctionType &f)
Definition: SkillProviderComponentPlugin.h:161
SkillExecutionRequest.h
armarx::plugins::SkillProviderComponentPlugin::addCustomSkillFactory
requires skills::isSkillBlueprint< FactoryT > FactoryT * addCustomSkillFactory(Args &&... args)
Definition: SkillProviderComponentPlugin.h:60
armarx::aron::data::DictPtr
std::shared_ptr< Dict > DictPtr
Definition: Dict.h:41
armarx::ManagedIceObject
The ManagedIceObject is the base class for all ArmarX objects.
Definition: ManagedIceObject.h:162
armarx::skills::SkillBlueprint
Definition: SkillFactory.h:11
IceUtil::Handle< class PropertyDefinitionContainer >
armarx::plugins::SkillProviderComponentPlugin::executeSkillAsync
skills::SkillExecutionID executeSkillAsync(const skills::SkillExecutionRequest &executionInfo)
Definition: SkillProviderComponentPlugin.cpp:263
armarx::plugins::SkillProviderComponentPlugin::postCreatePropertyDefinitions
void postCreatePropertyDefinitions(PropertyDefinitionsPtr &properties) override
Definition: SkillProviderComponentPlugin.cpp:52
ComponentPlugin.h
armarx::SkillProviderComponentPluginUser::addSkillFactory
requires skills::isSkill< SkillT > skills::SkillBlueprint * addSkillFactory(Args &&... args)
Definition: SkillProviderComponentPlugin.h:172
armarx::plugins::SkillProviderComponentPlugin::getSkillExecutionStatuses
std::map< skills::SkillExecutionID, skills::SkillStatusUpdate > getSkillExecutionStatuses() const
Definition: SkillProviderComponentPlugin.cpp:143
armarx::plugins::SkillProviderComponentPlugin::preOnInitComponent
void preOnInitComponent() override
Definition: SkillProviderComponentPlugin.cpp:11
armarx::skills::SkillID
Definition: SkillID.h:14
armarx::SkillProviderComponentPluginUser::getSkillExecutionStatuses
skills::provider::dto::SkillStatusUpdateMap getSkillExecutionStatuses(const Ice::Current &current=Ice::Current()) override
Definition: SkillProviderComponentPlugin.cpp:466
armarx
This file offers overloads of toIce() and fromIce() functions for STL container types.
Definition: ArmarXTimeserver.cpp:27
armarx::SkillProviderComponentPluginUser::SkillProviderComponentPluginUser
SkillProviderComponentPluginUser()
Definition: SkillProviderComponentPlugin.cpp:420