added callback to subscriber signature
This commit is contained in:
parent
c6d98ecb2a
commit
0559fafcd0
3 changed files with 24 additions and 13 deletions
|
@ -40,11 +40,11 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename ROSMessage>
|
template<typename ROSMessage>
|
||||||
Subscriber<ROSMessage>* create_subscriber(const char * topic_name)
|
Subscriber<ROSMessage>* create_subscriber(const char * topic_name, typename Subscriber<ROSMessage>::CallbackType callback)
|
||||||
{
|
{
|
||||||
const rosidl_generator_cpp::MessageTypeSupportHandle & type_support_handle = ::ros_middleware_interface::get_type_support_handle<ROSMessage>();
|
const rosidl_generator_cpp::MessageTypeSupportHandle & type_support_handle = ::ros_middleware_interface::get_type_support_handle<ROSMessage>();
|
||||||
ros_middleware_interface::SubscriberHandle subscriber_handle = ::ros_middleware_interface::create_subscriber(node_handle_, type_support_handle, topic_name);
|
ros_middleware_interface::SubscriberHandle subscriber_handle = ::ros_middleware_interface::create_subscriber(node_handle_, type_support_handle, topic_name);
|
||||||
SubscriberInterface *sub = new Subscriber<ROSMessage>(subscriber_handle, std::string(topic_name));
|
SubscriberInterface *sub = new Subscriber<ROSMessage>(subscriber_handle, std::string(topic_name), callback);
|
||||||
this->subscribers_.push_back(sub);
|
this->subscribers_.push_back(sub);
|
||||||
return static_cast<Subscriber<ROSMessage> *>(sub);
|
return static_cast<Subscriber<ROSMessage> *>(sub);
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,15 +25,13 @@ public:
|
||||||
SubscriberInterface(const ros_middleware_interface::SubscriberHandle &subscriber_handle, std::string topic_name)
|
SubscriberInterface(const ros_middleware_interface::SubscriberHandle &subscriber_handle, std::string topic_name)
|
||||||
: subscriber_handle_(subscriber_handle), topic_name_(topic_name)
|
: subscriber_handle_(subscriber_handle), topic_name_(topic_name)
|
||||||
{}
|
{}
|
||||||
virtual void * create_message()
|
|
||||||
{
|
|
||||||
throw std::runtime_error("not implemented - should always use override from subclass");
|
|
||||||
}
|
|
||||||
virtual void delete_message(void * ros_message)
|
|
||||||
{
|
|
||||||
throw std::runtime_error("not implemented - should always use override from subclass");
|
|
||||||
}
|
|
||||||
private:
|
private:
|
||||||
|
virtual void * create_message() = 0;
|
||||||
|
|
||||||
|
virtual void delete_message(void * ros_message) = 0;
|
||||||
|
|
||||||
|
virtual void handle_message(void * ros_message) = 0;
|
||||||
|
|
||||||
ros_middleware_interface::SubscriberHandle subscriber_handle_;
|
ros_middleware_interface::SubscriberHandle subscriber_handle_;
|
||||||
std::string topic_name_;
|
std::string topic_name_;
|
||||||
|
|
||||||
|
@ -44,20 +42,32 @@ class Subscriber : public SubscriberInterface
|
||||||
{
|
{
|
||||||
friend class rclcpp::Node;
|
friend class rclcpp::Node;
|
||||||
public:
|
public:
|
||||||
typedef std::function<void(ROSMessage *)> CallbackType;
|
typedef std::function<void(const ROSMessage *)> CallbackType;
|
||||||
Subscriber(const ros_middleware_interface::SubscriberHandle &subscriber_handle, std::string topic_name)
|
Subscriber(const ros_middleware_interface::SubscriberHandle &subscriber_handle, std::string topic_name, CallbackType callback)
|
||||||
: SubscriberInterface(subscriber_handle, topic_name)
|
: SubscriberInterface(subscriber_handle, topic_name), callback_(callback)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
private:
|
||||||
void * create_message()
|
void * create_message()
|
||||||
{
|
{
|
||||||
return new ROSMessage();
|
return new ROSMessage();
|
||||||
}
|
}
|
||||||
|
|
||||||
void delete_message(void * ros_message)
|
void delete_message(void * ros_message)
|
||||||
{
|
{
|
||||||
ROSMessage* msg = (ROSMessage*)ros_message;
|
ROSMessage* msg = (ROSMessage*)ros_message;
|
||||||
delete msg;
|
delete msg;
|
||||||
ros_message = 0;
|
ros_message = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void handle_message(void * ros_message)
|
||||||
|
{
|
||||||
|
ROSMessage* msg = (ROSMessage*)ros_message;
|
||||||
|
callback_(msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
CallbackType callback_;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -85,6 +85,7 @@ public:
|
||||||
if (taken)
|
if (taken)
|
||||||
{
|
{
|
||||||
std::cout << "- received message on topic: " << subscriber->topic_name_ << std::endl;
|
std::cout << "- received message on topic: " << subscriber->topic_name_ << std::endl;
|
||||||
|
subscriber->handle_message(ros_msg);
|
||||||
}
|
}
|
||||||
subscriber->delete_message(ros_msg);
|
subscriber->delete_message(ros_msg);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue