#pragma once #include "ros_bridge/rapidjson/include/rapidjson/document.h" #include "ros_bridge/include/CasePacker.h" #include "ros_bridge/include/TypeFactory.h" #include "ros_bridge/include/JsonFactory.h" #include "ros_bridge/include/TopicPublisher.h" #include "ros_bridge/include/Receiver.h" #include #include #include "boost/lockfree/queue.hpp" namespace ROSBridge { class ROSBridge { public: typedef MessageTag Tag; typedef rapidjson::Document JsonDoc; typedef std::unique_ptr JsonDocUPtr; explicit ROSBridge(); template void publish(T &msg, const std::string &topic){ _topicPublisher.publish(msg, topic); } void start(); void stop(); bool messagesAvailable(); bool showMessageTag(Tag &tag); template void receive(T &msg){ _receiver.receive(msg); } private: TypeFactory _typeFactory; JsonFactory _jsonFactory; CasePacker _casePacker; RosbridgeWsClient _rbc; ComPrivate::TopicPublisher _topicPublisher; ComPrivate::Receiver _receiver; }; }