16#ifndef CS4HOME_CORE__AFFERENT_HPP_
17#define CS4HOME_CORE__AFFERENT_HPP_
25#include "rclcpp_lifecycle/lifecycle_node.hpp"
26#include "rclcpp/rclcpp.hpp"
27#include "rclcpp/macros.hpp"
28#include "rclcpp/serialization.hpp"
29#include "rclcpp/create_generic_subscription.hpp"
42 RCLCPP_SMART_PTR_DEFINITIONS(
Afferent)
54 explicit Afferent(rclcpp_lifecycle::LifecycleNode::SharedPtr parent);
70 std::function<
void(std::unique_ptr<rclcpp::SerializedMessage>)> cb =
nullptr);
97 template<
class MessageT> std::unique_ptr<MessageT>
get_msg(
98 std::unique_ptr<rclcpp::SerializedMessage> msg)
100 auto typed_msg = std::make_unique<MessageT>();
101 rclcpp::Serialization<MessageT> serializer;
102 serializer.deserialize_message(msg.get(), typed_msg.get());
104 return std::move(typed_msg);
112 template<
class MessageT> std::unique_ptr<MessageT>
get_msg()
118 std::unique_ptr<rclcpp::SerializedMessage> msg = std::move(
msg_queue_.front());
126 rclcpp_lifecycle::LifecycleNode::SharedPtr
parent_;
128 std::vector<std::shared_ptr<rclcpp::GenericSubscription>>
subs_;
137 std::queue<std::unique_ptr<rclcpp::SerializedMessage>>
msg_queue_;
140 std::function<void(std::unique_ptr<rclcpp::SerializedMessage>)>
callback_;
const size_t MAX_DEFAULT_QUEUE_SIZE
Default maximum queue size.
Definition Afferent.hpp:133
bool create_subscriber(const std::string &topic, const std::string &type)
Creates a subscriber for a specific topic and message type.
Definition Afferent.cpp:71
void set_max_queue_size(size_t size)
Sets the maximum queue size for storing messages.
Definition Afferent.hpp:83
std::function< void(std::unique_ptr< rclcpp::SerializedMessage >)> callback_
Callback for serialized messages.
Definition Afferent.hpp:140
EfferentProcessMode get_mode()
Gets the current processing mode.
Definition Afferent.hpp:77
EfferentProcessMode mode_
Current processing mode.
Definition Afferent.hpp:130
Afferent(rclcpp_lifecycle::LifecycleNode::SharedPtr parent)
Constructor for the Afferent class.
Definition Afferent.cpp:27
std::unique_ptr< MessageT > get_msg(std::unique_ptr< rclcpp::SerializedMessage > msg)
Converts a serialized message to a typed message.
Definition Afferent.hpp:97
size_t max_queue_size_
Maximum queue size.
Definition Afferent.hpp:135
std::vector< std::shared_ptr< rclcpp::GenericSubscription > > subs_
List of subscriptions.
Definition Afferent.hpp:128
virtual bool configure()=0
Configures the afferent component; intended for subclass implementation.
rclcpp_lifecycle::LifecycleNode::SharedPtr parent_
Shared pointer to the parent node.
Definition Afferent.hpp:126
std::queue< std::unique_ptr< rclcpp::SerializedMessage > > msg_queue_
Queue for serialized messages.
Definition Afferent.hpp:137
void set_mode(EfferentProcessMode mode, std::function< void(std::unique_ptr< rclcpp::SerializedMessage >)> cb=nullptr)
Sets the processing mode and an optional callback function.
Definition Afferent.cpp:42
EfferentProcessMode
Defines processing modes for serialized message handling.
Definition Afferent.hpp:48
@ ONDEMAND
Definition Afferent.hpp:48
@ CALLBACK
Definition Afferent.hpp:48
size_t get_max_queue_size()
Gets the maximum queue size.
Definition Afferent.hpp:89
std::unique_ptr< MessageT > get_msg()
Retrieves the next message from the queue, if available.
Definition Afferent.hpp:112
Definition Afferent.hpp:32