#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/topic_publisher.h" #include "ros_bridge/include/topic_subscriber.h" #include "ros_bridge/include/server.h" #include #include namespace ros_bridge { class ROSBridge { public: typedef rapidjson::Document JsonDoc; typedef std::unique_ptr JsonDocUPtr; explicit ROSBridge(); explicit ROSBridge(const char* connectionString); void publish(JsonDocUPtr doc, const char* topic); void subscribe(const char *topic, const std::function &callBack); void advertiseService(const char* service, const char* type, const std::function &callback); //! @brief Start ROS bridge. void start(); //! @brief Stops ROS bridge. void reset(); //! @return Returns true if connected to the rosbridge_server, false either. //! @note This function can block up to 100ms. However normal execution time is smaller. bool connected(); bool isRunning(); private: std::shared_ptr _stopped; RosbridgeWsClient _rbc; com_private::TopicPublisher _topicPublisher; com_private::TopicSubscriber _topicSubscriber; com_private::Server _server; }; bool isValidConnectionString(const char* connectionString); }