SOIL C++
C++ Unified Device Interface
Publisher.h
Go to the documentation of this file.
1#pragma once
2#include "constants.h"
3#include "Configuration.h"
4#include "MessageContainer.h"
5#include <deque>
6#include <atomic>
7#include <mutex>
8#include <thread>
9#include <vector>
10#include <condition_variable>
11//#include <mqtt/async_client.h>
12
13
14namespace mqtt
15{
19 class async_client;
20}
21
22namespace MQTT
23{
35 class DLL Publisher
36 {
37 private:
44 static int instances;
45
52 std::string id;
53
62 unsigned int buffer;
63
69 Configuration configuration;
70
77 std::shared_ptr<mqtt::async_client> client;
78
84 std::deque<MessageContainer> queue;
85
91 std::atomic<int> queue_size;
92
98 std::mutex queue_mutex;
99
105 std::condition_variable queue_condition;
106
113 std::shared_ptr<std::thread> worker;
114
121 std::atomic<bool> worker_running;
122
130 void loop(void);
131
138 void restart_worker(void);
139
145 void stop_worker(void);
146
147
148 public:
157 Publisher(std::string id, unsigned int buffer = 1024);
158
164 ~Publisher();
165
177 bool publish(std::string topic, std::string message, int qos, bool retain);
178
190 bool publish(std::vector<std::string> topics, std::vector<std::string> messages, int qos, bool retain);
191
200 void connect(MQTT::Configuration configuration);
201
207 void connect();
208
214 void reconnect(void);
215
224 void disconnect(unsigned int timeout = 10000);
225
232 void set_root_topic(std::string root_topic);
233
241 void set_buffer(unsigned int buffer);
242
251 bool is_connected(void);
252
261 inline int min_delay_ms(void) { return configuration.min_delay_ms; }
262
270 void configure(MQTT::Configuration configuration);
271
272
273 };
274}
275
276
MQTT publishing configuration.
Definition: Configuration.h:14
int min_delay_ms
Minimum delay between to messages in milliseconds.
Definition: Configuration.h:81
MQTT Publisher.
Definition: Publisher.h:36
int min_delay_ms(void)
Minimum delay between to messages in milliseconds.
Definition: Publisher.h:261
Definition: Publisher.h:15