@@ -74,16 +74,25 @@ class ServerBaseImpl
7474{
7575public:
7676 ServerBaseImpl (
77+ rclcpp::node_interfaces::NodeBaseInterface::SharedPtr node_base,
78+ const rosidl_action_type_support_t * type_support,
7779 rclcpp::Clock::SharedPtr clock,
7880 rclcpp::Logger logger
7981 )
80- : clock_(clock), logger_(logger)
82+ : node_handle_(node_base->get_shared_rcl_node_handle ()),
83+ action_type_support_(type_support),
84+ clock_(clock),
85+ logger_(logger)
8186 {
8287 }
8388
8489 // Lock for action_server_
8590 std::recursive_mutex action_server_reentrant_mutex_;
8691
92+ std::shared_ptr<rcl_node_t > node_handle_;
93+
94+ const rosidl_action_type_support_t * action_type_support_;
95+
8796 rclcpp::Clock::SharedPtr clock_;
8897
8998 rclcpp::TimerBase::SharedPtr expire_timer_;
@@ -124,7 +133,8 @@ ServerBase::ServerBase(
124133 const rcl_action_server_options_t & options
125134)
126135: pimpl_(new ServerBaseImpl(
127- node_clock->get_clock (), node_logging->get_logger().get_child(" rclcpp_action" )))
136+ node_base, type_support, node_clock->get_clock (),
137+ node_logging->get_logger().get_child(" rclcpp_action" )))
128138{
129139 auto deleter = [node_base](rcl_action_server_t * ptr)
130140 {
@@ -929,3 +939,29 @@ ServerBase::get_timers() const
929939{
930940 return {pimpl_->expire_timer_ };
931941}
942+
943+ void
944+ ServerBase::configure_introspection (
945+ rclcpp::Clock::SharedPtr clock, const rclcpp::QoS & qos_service_event_pub,
946+ rcl_service_introspection_state_t introspection_state)
947+ {
948+ rcl_publisher_options_t pub_opts = rcl_publisher_get_default_options ();
949+ pub_opts.qos = qos_service_event_pub.get_rmw_qos_profile ();
950+
951+ if (clock == nullptr ) {
952+ throw std::invalid_argument (" clock is nullptr" );
953+ }
954+
955+ rcl_ret_t ret = rcl_action_server_configure_internal_service_introspection (
956+ pimpl_->action_server_ .get (),
957+ pimpl_->node_handle_ .get (),
958+ clock->get_clock_handle (),
959+ pimpl_->action_type_support_ ,
960+ pub_opts,
961+ introspection_state);
962+
963+ if (RCL_RET_OK != ret) {
964+ rclcpp::exceptions::throw_from_rcl_error (
965+ ret, " failed to configure action server introspection" );
966+ }
967+ }
0 commit comments