updated subscriber interface

This commit is contained in:
William Woodall 2014-08-12 21:46:41 -07:00
parent 2b8e19c88d
commit a1b0a33098
3 changed files with 13 additions and 5 deletions

View file

@ -2,6 +2,7 @@
#define __rclcpp__Node__h__ #define __rclcpp__Node__h__
#include <memory> #include <memory>
#include <string>
#include <vector> #include <vector>
#include "Publisher.h" #include "Publisher.h"
@ -43,7 +44,7 @@ public:
{ {
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); SubscriberInterface *sub = new Subscriber<ROSMessage>(subscriber_handle, std::string(topic_name));
this->subscribers_.push_back(sub); this->subscribers_.push_back(sub);
return static_cast<Subscriber<ROSMessage> *>(sub); return static_cast<Subscriber<ROSMessage> *>(sub);
} }

View file

@ -2,6 +2,7 @@
#define __rclcpp__Subscriber__h__ #define __rclcpp__Subscriber__h__
#include <functional> #include <functional>
#include <string>
#include "ros_middleware_interface/functions.h" #include "ros_middleware_interface/functions.h"
#include "ros_middleware_interface/handles.h" #include "ros_middleware_interface/handles.h"
@ -21,11 +22,13 @@ class SubscriberInterface
{ {
friend class rclcpp::executor::SingleThreadExecutor; friend class rclcpp::executor::SingleThreadExecutor;
public: public:
SubscriberInterface(const ros_middleware_interface::SubscriberHandle &subscriber_handle) SubscriberInterface(const ros_middleware_interface::SubscriberHandle &subscriber_handle, std::string topic_name)
: subscriber_handle_(subscriber_handle) : subscriber_handle_(subscriber_handle), topic_name_(topic_name)
{} {}
private: private:
ros_middleware_interface::SubscriberHandle subscriber_handle_; ros_middleware_interface::SubscriberHandle subscriber_handle_;
std::string topic_name_;
}; };
template<typename ROSMessage> template<typename ROSMessage>
@ -34,8 +37,8 @@ class Subscriber : public SubscriberInterface
friend class rclcpp::Node; friend class rclcpp::Node;
public: public:
typedef std::function<void(ROSMessage *)> CallbackType; typedef std::function<void(ROSMessage *)> CallbackType;
Subscriber(const ros_middleware_interface::SubscriberHandle &subscriber_handle) Subscriber(const ros_middleware_interface::SubscriberHandle &subscriber_handle, std::string topic_name)
: SubscriberInterface(subscriber_handle) : SubscriberInterface(subscriber_handle, topic_name)
{} {}
}; };

View file

@ -3,6 +3,7 @@
#include <algorithm> #include <algorithm>
#include <cassert> #include <cassert>
#include <iostream>
#include <vector> #include <vector>
#include "rclcpp/Node.h" #include "rclcpp/Node.h"
@ -78,6 +79,9 @@ public:
if (subscriber->subscriber_handle_.data_ == handle) if (subscriber->subscriber_handle_.data_ == handle)
{ {
// Do callback // Do callback
std::cout << "Callback for subscriber of topic: " << subscriber->topic_name_ << std::endl;
const void *ros_msg = 0;
ros_middleware_interface::take(subscriber->subscriber_handle_, ros_msg);
} }
} }
} }