15 #ifndef RCLCPP__SUBSCRIPTION_FACTORY_HPP_ 16 #define RCLCPP__SUBSCRIPTION_FACTORY_HPP_ 25 #include "rosidl_typesupport_cpp/message_type_support.hpp" 51 rclcpp::SubscriptionBase::SharedPtr(
61 rclcpp::intra_process_manager::IntraProcessManager::SharedPtr ipm,
62 rclcpp::SubscriptionBase::SharedPtr subscription,
73 typename CallbackMessageT,
74 typename SubscriptionT>
77 CallbackT && callback,
79 CallbackMessageT, Alloc>::SharedPtr
87 any_subscription_callback.
set(std::forward<CallbackT>(callback));
90 std::make_shared<typename Subscription<CallbackMessageT, Alloc>::MessageAlloc>();
94 [allocator, msg_mem_strat, any_subscription_callback, message_alloc](
98 ) -> rclcpp::SubscriptionBase::SharedPtr
100 subscription_options.allocator =
101 rclcpp::allocator::get_rcl_allocator<CallbackMessageT>(*message_alloc.get());
107 node_base->get_shared_rcl_node_handle(),
108 *rosidl_typesupport_cpp::get_message_type_support_handle<MessageT>(),
110 subscription_options,
111 any_subscription_callback,
120 rclcpp::intra_process_manager::IntraProcessManager::SharedPtr ipm,
121 rclcpp::SubscriptionBase::SharedPtr subscription,
124 rclcpp::intra_process_manager::IntraProcessManager::WeakPtr weak_ipm = ipm;
125 uint64_t intra_process_subscription_id = ipm->add_subscription(subscription);
128 intra_process_options.allocator = rclcpp::allocator::get_rcl_allocator<CallbackMessageT>(
129 *message_alloc.get());
130 intra_process_options.qos = subscription_options.qos;
131 intra_process_options.ignore_local_publications =
false;
134 auto take_intra_process_message_func =
136 uint64_t publisher_id,
137 uint64_t message_sequence,
138 uint64_t subscription_id,
141 auto ipm = weak_ipm.lock();
145 "intra process take called after destruction of intra process manager");
147 ipm->take_intra_process_message<CallbackMessageT, Alloc>(
148 publisher_id, message_sequence, subscription_id, message);
152 auto matches_any_publisher_func =
153 [weak_ipm](
const rmw_gid_t * sender_gid) ->
bool 155 auto ipm = weak_ipm.lock();
158 "intra process publisher check called " 159 "after destruction of intra process manager");
161 return ipm->matches_any_publishers(sender_gid);
165 typed_sub_ptr->setup_intra_process(
166 intra_process_subscription_id,
167 take_intra_process_message_func,
168 matches_any_publisher_func,
169 intra_process_options
180 #endif // RCLCPP__SUBSCRIPTION_FACTORY_HPP_ Subscription implementation, templated on the type of message this subscription receives.
Definition: subscription.hpp:147
SetupIntraProcessFunction setup_intra_process
Definition: subscription_factory.hpp:65
Definition: allocator_common.hpp:24
Definition: any_subscription_callback.hpp:34
rcl_subscription_options_t rcl_subscription_get_default_options(void)
Definition: subscription.hpp:51
T dynamic_pointer_cast(T... args)
Default allocation strategy for messages received by subscriptions.
Definition: message_memory_strategy.hpp:38
Pure virtual interface class for the NodeBase part of the Node API.
Definition: node_base_interface.hpp:36
SubscriptionFactoryFunction create_typed_subscription
Definition: subscription_factory.hpp:56
Factory with functions used to create a Subscription<MessageT>.
Definition: subscription_factory.hpp:47
void set(CallbackT callback)
Definition: any_subscription_callback.hpp:79
SubscriptionFactory create_subscription_factory(CallbackT &&callback, typename rclcpp::message_memory_strategy::MessageMemoryStrategy< CallbackMessageT, Alloc >::SharedPtr msg_mem_strat, std::shared_ptr< Alloc > allocator)
Return a SubscriptionFactory with functions for creating a SubscriptionT<MessageT, Alloc>.
Definition: subscription_factory.hpp:76