File tree Expand file tree Collapse file tree 12 files changed +128
-0
lines changed Expand file tree Collapse file tree 12 files changed +128
-0
lines changed Original file line number Diff line number Diff line change @@ -150,6 +150,12 @@ class ClientBase
150150 bool
151151 exchange_in_use_by_wait_set_state (bool in_use_state);
152152
153+ RCLCPP_PUBLIC
154+ void
155+ set_listener_callback (
156+ rmw_listener_callback_t callback,
157+ const void * user_data) const ;
158+
153159protected:
154160 RCLCPP_DISABLE_COPY (ClientBase)
155161
Original file line number Diff line number Diff line change @@ -74,6 +74,12 @@ class SubscriptionIntraProcessBase : public rclcpp::Waitable
7474 rmw_qos_profile_t
7575 get_actual_qos () const ;
7676
77+ RCLCPP_PUBLIC
78+ void
79+ set_listener_callback (
80+ rmw_listener_callback_t callback,
81+ const void * user_data) const override ;
82+
7783protected:
7884 std::recursive_mutex reentrant_mutex_;
7985 rcl_guard_condition_t gc_;
Original file line number Diff line number Diff line change @@ -102,6 +102,12 @@ class QOSEventHandlerBase : public Waitable
102102 bool
103103 is_ready (rcl_wait_set_t * wait_set) override ;
104104
105+ RCLCPP_PUBLIC
106+ void
107+ set_listener_callback (
108+ rmw_listener_callback_t callback,
109+ const void * user_data) const override ;
110+
105111protected:
106112 rcl_event_t event_handle_;
107113 size_t wait_set_event_index_;
Original file line number Diff line number Diff line change @@ -121,6 +121,12 @@ class ServiceBase
121121 bool
122122 exchange_in_use_by_wait_set_state (bool in_use_state);
123123
124+ RCLCPP_PUBLIC
125+ void
126+ set_listener_callback (
127+ rmw_listener_callback_t callback,
128+ const void * user_data) const ;
129+
124130protected:
125131 RCLCPP_DISABLE_COPY (ServiceBase)
126132
Original file line number Diff line number Diff line change @@ -263,6 +263,12 @@ class SubscriptionBase : public std::enable_shared_from_this<SubscriptionBase>
263263 bool
264264 exchange_in_use_by_wait_set_state (void * pointer_to_subscription_part, bool in_use_state);
265265
266+ RCLCPP_PUBLIC
267+ void
268+ set_listener_callback (
269+ rmw_listener_callback_t callback,
270+ const void * user_data) const ;
271+
266272protected:
267273 template <typename EventCallbackT>
268274 void
Original file line number Diff line number Diff line change @@ -203,6 +203,13 @@ class Waitable
203203 bool
204204 exchange_in_use_by_wait_set_state (bool in_use_state);
205205
206+ RCLCPP_PUBLIC
207+ virtual
208+ void
209+ set_listener_callback (
210+ rmw_listener_callback_t callback,
211+ const void * user_data) const ;
212+
206213private:
207214 std::atomic<bool > in_use_by_wait_set_{false };
208215}; // class Waitable
Original file line number Diff line number Diff line change @@ -198,3 +198,18 @@ ClientBase::exchange_in_use_by_wait_set_state(bool in_use_state)
198198{
199199 return in_use_by_wait_set_.exchange (in_use_state);
200200}
201+
202+ void
203+ ClientBase::set_listener_callback (
204+ rmw_listener_callback_t callback,
205+ const void * user_data) const
206+ {
207+ rcl_ret_t ret = rcl_client_set_listener_callback (
208+ client_handle_.get (),
209+ callback,
210+ user_data);
211+
212+ if (RCL_RET_OK != ret) {
213+ throw std::runtime_error (" Couldn't set listener callback to client" );
214+ }
215+ }
Original file line number Diff line number Diff line change @@ -68,4 +68,20 @@ QOSEventHandlerBase::is_ready(rcl_wait_set_t * wait_set)
6868 return wait_set->events [wait_set_event_index_] == &event_handle_;
6969}
7070
71+ void
72+ QOSEventHandlerBase::set_listener_callback (
73+ rmw_listener_callback_t callback,
74+ const void * user_data) const
75+ {
76+ rcl_ret_t ret = rcl_event_set_listener_callback (
77+ &event_handle_,
78+ callback,
79+ user_data,
80+ false /* Discard previous events */ );
81+
82+ if (RCL_RET_OK != ret) {
83+ throw std::runtime_error (" Couldn't set listener callback to QOSEventHandlerBase" );
84+ }
85+ }
86+
7187} // namespace rclcpp
Original file line number Diff line number Diff line change @@ -84,3 +84,18 @@ ServiceBase::exchange_in_use_by_wait_set_state(bool in_use_state)
8484{
8585 return in_use_by_wait_set_.exchange (in_use_state);
8686}
87+
88+ void
89+ ServiceBase::set_listener_callback (
90+ rmw_listener_callback_t callback,
91+ const void * user_data) const
92+ {
93+ rcl_ret_t ret = rcl_service_set_listener_callback (
94+ service_handle_.get (),
95+ callback,
96+ user_data);
97+
98+ if (RCL_RET_OK != ret) {
99+ throw std::runtime_error (" Couldn't set listener callback to service" );
100+ }
101+ }
Original file line number Diff line number Diff line change @@ -288,3 +288,18 @@ SubscriptionBase::exchange_in_use_by_wait_set_state(
288288 }
289289 throw std::runtime_error (" given pointer_to_subscription_part does not match any part" );
290290}
291+
292+ void
293+ SubscriptionBase::set_listener_callback (
294+ rmw_listener_callback_t callback,
295+ const void * user_data) const
296+ {
297+ rcl_ret_t ret = rcl_subscription_set_listener_callback (
298+ subscription_handle_.get (),
299+ callback,
300+ user_data);
301+
302+ if (RCL_RET_OK != ret) {
303+ throw std::runtime_error (" Couldn't set listener callback to subscription" );
304+ }
305+ }
You can’t perform that action at this time.
0 commit comments