ros_bridge.h 1.46 KB
Newer Older
Valentin Platzgummer's avatar
Valentin Platzgummer committed
1 2 3
#pragma once

#include "ros_bridge/rapidjson/include/rapidjson/document.h"
4 5 6
#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
7 8

#include <memory>
9
#include <functional>
Valentin Platzgummer's avatar
Valentin Platzgummer committed
10

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

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

29
    //! @brief Start ROS bridge.
Valentin Platzgummer's avatar
Valentin Platzgummer committed
30
    void start();
31
    //! @brief Stops ROS bridge.
32
    void reset();
Valentin Platzgummer's avatar
Valentin Platzgummer committed
33

34
    //! @return Returns true if connected to the rosbridge_server, false either.
Valentin Platzgummer's avatar
Valentin Platzgummer committed
35
    //! @note \fn calls start().
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
}