ros_bridge.h 1.57 KB
Newer Older
Valentin Platzgummer's avatar
Valentin Platzgummer committed
1 2 3 4 5 6
#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"
7 8 9
#include "ros_bridge/include/topic_publisher.h"
#include "ros_bridge/include/topic_subscriber.h"
#include "ros_bridge/include/server.h"
Valentin Platzgummer's avatar
Valentin Platzgummer committed
10 11

#include <memory>
12
#include <functional>
Valentin Platzgummer's avatar
Valentin Platzgummer committed
13

14
namespace ros_bridge {
Valentin Platzgummer's avatar
Valentin Platzgummer committed
15 16
class ROSBridge
{
17
public:
Valentin Platzgummer's avatar
Valentin Platzgummer committed
18 19 20 21
    typedef rapidjson::Document JsonDoc;
    typedef std::unique_ptr<JsonDoc> JsonDocUPtr;

    explicit ROSBridge();
22
    explicit ROSBridge(const char* connectionString);
23
    void publish(JsonDocUPtr doc, const char* topic);
24 25
    void subscribe(const char *topic,
                   const std::function<void(JsonDocUPtr)> &callBack);
26 27
    void advertiseService(const char* service,
                          const char* type,
28
                          const std::function<JsonDocUPtr(JsonDocUPtr)> &callback);
Valentin Platzgummer's avatar
Valentin Platzgummer committed
29

30
    //! @brief Start ROS bridge.
Valentin Platzgummer's avatar
Valentin Platzgummer committed
31
    void start();
32
    //! @brief Stops ROS bridge.
33
    void reset();
34 35
    //! @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.
36
    bool connected();
37
    bool isRunning();
Valentin Platzgummer's avatar
Valentin Platzgummer committed
38 39

private:
40 41 42 43 44
    std::shared_ptr<std::atomic_bool>   _stopped;
    RosbridgeWsClient                   _rbc;
    com_private::TopicPublisher          _topicPublisher;
    com_private::TopicSubscriber         _topicSubscriber;
    com_private::Server                  _server;
Valentin Platzgummer's avatar
Valentin Platzgummer committed
45 46

};
47 48

bool isValidConnectionString(const char* connectionString);
Valentin Platzgummer's avatar
Valentin Platzgummer committed
49
}