topic_publisher.h 1.07 KB
Newer Older
Valentin Platzgummer's avatar
Valentin Platzgummer committed
1 2
#pragma once

3
#include "ros_bridge/include/com_private.h"
Valentin Platzgummer's avatar
Valentin Platzgummer committed
4 5 6 7 8
#include "ros_bridge/include/RosBridgeClient.h"

#include <thread>
#include <atomic>
#include <mutex>
9
#include <condition_variable>
Valentin Platzgummer's avatar
Valentin Platzgummer committed
10

11 12
namespace ros_bridge {
namespace com_private {
Valentin Platzgummer's avatar
Valentin Platzgummer committed
13

14 15
struct ThreadData;

Valentin Platzgummer's avatar
Valentin Platzgummer committed
16
class TopicPublisher
Valentin Platzgummer's avatar
Valentin Platzgummer committed
17 18
{
    typedef std::unique_ptr<std::thread> ThreadPtr;
19
    using CondVar = std::condition_variable;
Valentin Platzgummer's avatar
Valentin Platzgummer committed
20 21
public:

Valentin Platzgummer's avatar
Valentin Platzgummer committed
22
    TopicPublisher() = delete;
Valentin Platzgummer's avatar
Valentin Platzgummer committed
23
    TopicPublisher(RosbridgeWsClient &rbc);
Valentin Platzgummer's avatar
Valentin Platzgummer committed
24 25

    ~TopicPublisher();
Valentin Platzgummer's avatar
Valentin Platzgummer committed
26

27
    //! @brief Starts the publisher.
Valentin Platzgummer's avatar
Valentin Platzgummer committed
28
    void start();
29 30 31 32

    //! @brief Resets the publisher.
    void reset();

33
    void publish(JsonDocUPtr docPtr, const char *topic);
Valentin Platzgummer's avatar
Valentin Platzgummer committed
34
    bool advertise(const char *topic, const char *type);
35

Valentin Platzgummer's avatar
Valentin Platzgummer committed
36
private:
Valentin Platzgummer's avatar
Valentin Platzgummer committed
37
    using TopicMap = std::unordered_map<std::string, std::string>;
Valentin Platzgummer's avatar
Valentin Platzgummer committed
38
    JsonQueue           _queue;
Valentin Platzgummer's avatar
Valentin Platzgummer committed
39
    TopicMap            _topicMap;
40 41
    std::mutex          _mutex;
    std::shared_ptr<std::atomic_bool>   _stopped;
42
    RosbridgeWsClient  &_rbc;
43 44
    CondVar             _cv;
    ThreadPtr           _pThread;
Valentin Platzgummer's avatar
Valentin Platzgummer committed
45 46 47 48 49
};


} // namespace CommunicatorDetail
} // namespace ROSBridge