28#include <rclcpp_action/rclcpp_action.hpp>
36template <
typename ActionType>
43 using Goal =
typename ActionClient::Goal;
44 using Feedback =
typename ActionClient::Feedback;
45 using GoalHandle = rclcpp_action::ClientGoalHandle<ActionType>;
50 std::function<void(std::shared_future<typename GoalHandle::SharedPtr>)>;
53 using CancelRequest =
typename ActionType::Impl::CancelGoalService::Request;
54 using CancelResponse =
typename ActionType::Impl::CancelGoalService::Response;
55 using CancelCallback = std::function<void(
typename CancelResponse::SharedPtr)>;
86 client_->wait_for_action_server();
92 return type->getNonTemplatedTypeName();
95 std::optional<std::shared_future<typename GoalHandle::SharedPtr>>
lastRequest_;
115 template <
typename EvType>
118 auto * ev =
new EvType();
124 template <
typename TOrthogonal,
typename TSourceObject>
139 actionFeedbackEvent->client =
this;
140 actionFeedbackEvent->feedbackMessage = msg;
148 template <
typename T>
154 template <
typename T>
160 template <
typename T>
166 template <
typename T>
172 template <
typename T>
178 template <
typename T>
191 std::shared_future<typename GoalHandle::SharedPtr>
sendGoal(
199 options.result_callback =
200 [
this, resultCallback](
201 const typename rclcpp_action::ClientGoalHandle<ActionType>::WrappedResult & result)
204 getLogger(),
"[" <<
getName() <<
"] Action result callback, getting shared future");
207 << rclcpp_action::to_string(result.goal_id));
209 auto resultCallbackPtr = resultCallback.lock();
211 if (resultCallbackPtr !=
nullptr)
216 (*resultCallbackPtr)(result);
228 << this->
client_->get_number_of_ready_clients());
231 "[" <<
getName() <<
"] Waiting it is ready? " <<
client_->action_server_is_ready());
234 auto lastRequest = this->
client_->async_send_goal(goal, options);
235 this->lastRequest_ = lastRequest;
246 typename GoalHandle::SharedPtr ,
247 const std::shared_ptr<const Feedback> feedback_msg)
254 const auto & resultType = result_msg.code;
258 << rclcpp_action::to_string(result_msg.goal_id) <<
"]: " << (
int)resultType);
260 if (resultType == rclcpp_action::ResultCode::SUCCEEDED)
262 RCLCPP_INFO(
getLogger(),
"[%s] request result: Success", this->
getName().c_str());
266 else if (resultType == rclcpp_action::ResultCode::ABORTED)
268 RCLCPP_INFO(
getLogger(),
"[%s] request result: Aborted", this->
getName().c_str());
272 else if (resultType == rclcpp_action::ResultCode::CANCELED)
274 RCLCPP_INFO(
getLogger(),
"[%s] request result: Cancelled", this->
getName().c_str());
281 getLogger(),
"[%s] request result: NOT HANDLED TYPE: %d", this->
getName().c_str(),
rclcpp::Node::SharedPtr getNode()
ISmaccStateMachine * getStateMachine()
rclcpp::Logger getLogger()
smacc2::SmaccSignalConnection createSignalConnection(TSmaccSignal &signal, TMemberFunctionPrototype callback, TSmaccObjectType *object)
std::weak_ptr< SmaccSignal< void(const WrappedResult &), optional_last_value< typename boost::function_traits< void(const WrappedResult &)>::result_type >, int, std::less< int >, function< void(const WrappedResult &)>, typename extended_signature< function_traits< void(const WrappedResult &)>::arity, void(const WrappedResult &)>::function_type, boost::signals2::mutex > > WeakPtr
virtual std::string getName() const
std::optional< std::shared_future< typename CancelResponse::SharedPtr > > lastCancelResponse_
SmaccActionResultSignal onCancelled_
typename ActionType::Impl::CancelGoalService::Response CancelResponse
typename ActionClient::Feedback Feedback
typename ActionType::Impl::CancelGoalService::Request CancelRequest
GoalHandle::WrappedResult WrappedResult
SmaccActionResultSignal onAborted_
std::function< void(typename CancelResponse::SharedPtr)> CancelCallback
std::string action_endpoint_
typename ActionClient::SendGoalOptions SendGoalOptions
smacc2::SmaccSignalConnection onCancelled(std::function< void(WrappedResult &)> callback)
virtual ~SmaccActionClientBase()
static std::string getEventLabel()
void onFeedback(typename GoalHandle::SharedPtr, const std::shared_ptr< const Feedback > feedback_msg)
smacc2::SmaccSignal< void(const WrappedResult &)> SmaccActionResultSignal
virtual std::shared_ptr< rclcpp_action::ClientBase > getClientBase() override
std::function< void(WrappedResult)> postCancelledEvent
smacc2::SmaccSignalConnection onSucceeded(void(T::*callback)(WrappedResult &), T *object)
std::function< void(WrappedResult)> postSuccessEvent
FeedbackCallback feedback_cb
void onInitialize() override
ActionClient::SharedPtr client_
smacc2::SmaccSignalConnection onAborted(std::function< void(WrappedResult &)> callback)
smacc2::SmaccSignalConnection onCancelled(void(T::*callback)(WrappedResult &), T *object)
rclcpp_action::ClientGoalHandle< ActionType > GoalHandle
rclcpp_action::Client< ActionType > ActionClient
SmaccActionClientBase(std::string actionServerName)
std::function< void(std::shared_future< typename GoalHandle::SharedPtr >)> GoalResponseCallback
std::function< void(WrappedResult)> postAbortedEvent
void onResult(const WrappedResult &result_msg)
std::function< void(const Feedback &)> postFeedbackEvent
typename ActionClient::Goal Goal
virtual bool cancelGoal() override
std::shared_future< typename GoalHandle::SharedPtr > sendGoal(Goal &goal, typename SmaccActionResultSignal::WeakPtr resultCallback=typename SmaccActionResultSignal::WeakPtr())
smacc2::SmaccSignalConnection onAborted(void(T::*callback)(WrappedResult &), T *object)
smacc2::SmaccSignalConnection onSucceeded(std::function< void(WrappedResult &)> callback)
typename GoalHandle::ResultCallback ResultCallback
void postResultEvent(WrappedResult &)
void onStateOrthogonalAllocation()
std::optional< std::shared_future< typename GoalHandle::SharedPtr > > lastRequest_
typename GoalHandle::FeedbackCallback FeedbackCallback
SmaccActionResultSignal onSucceeded_
static TypeInfo::Ptr getTypeInfoFromType()
std::string demangleSymbol()
std::string demangledTypeName()
std::string demangleType(const std::type_info *tinfo)
boost::signals2::connection SmaccSignalConnection