Commit 26f938772b29c8c42de9c6596b4b4a99c3e2cbb4
1 parent
c6669435
Added examples.
Showing
1 changed file
with
112 additions
and
1 deletions
README.md
@@ -41,4 +41,115 @@ later the "pub" part. If all went well, you should see two screens in sync runni | @@ -41,4 +41,115 @@ later the "pub" part. If all went well, you should see two screens in sync runni | ||
41 | Open terminal 2 | 41 | Open terminal 2 |
42 | $ bin/test_mqtt_pub | 42 | $ bin/test_mqtt_pub |
43 | ``` | 43 | ``` |
44 | -Screen 2 is sending, Screen 1 is receiving. | ||
45 | \ No newline at end of file | 44 | \ No newline at end of file |
45 | +Screen 2 is sending, Screen 1 is receiving. | ||
46 | + | ||
47 | +# Using the library. | ||
48 | +Using mqtt-cpp is pretty straight forward. No real magic is happening. Beware of the fact that the library uses the namespace : | ||
49 | +``` | ||
50 | + osdev::components::mqtt | ||
51 | +``` | ||
52 | + | ||
53 | +## Publishing.. | ||
54 | +To create a publisher, a simple member needs to be created. | ||
55 | +Header : | ||
56 | +``` | ||
57 | + #pragma once | ||
58 | + | ||
59 | + // std | ||
60 | + #include <memory> | ||
61 | + #include <string> | ||
62 | + | ||
63 | + // osdev::components::mqtt | ||
64 | + #include "mqttclient.h" | ||
65 | + #include "compat-c++14.h" | ||
66 | + | ||
67 | + class Publisher | ||
68 | + { | ||
69 | + public: | ||
70 | + Publisher(const std::string &client_id); | ||
71 | + | ||
72 | + virtual ~Publisher() {} | ||
73 | + | ||
74 | + void connect( const std::string &hostname, int portnumber = 1883, const std::string &username = std::string(), const std::string &password = std::string() ); | ||
75 | + | ||
76 | + void publish( const std::string &message_topic, const std::string &message_payload ); | ||
77 | + | ||
78 | + private: | ||
79 | + osdev::components::mqtt::MqttClient m_mqtt_client; | ||
80 | + }; | ||
81 | +``` | ||
82 | + | ||
83 | +Implementation | ||
84 | +``` | ||
85 | + | ||
86 | + // osdev::components::mqtt | ||
87 | + // #include "token.h" | ||
88 | + | ||
89 | + // mqtt_tests | ||
90 | + #include "publisher.h" | ||
91 | + | ||
92 | + Publisher::Publisher(const std::string &client_id) | ||
93 | + : m_mqtt_client( client_id ) | ||
94 | + { | ||
95 | + | ||
96 | + } | ||
97 | + | ||
98 | + void Publisher::connect( const std::string &hostname, int portnumber, const std::string &username, const std::string &password ) | ||
99 | + { | ||
100 | + m_mqtt_client.connect( hostname, portnumber, osdev::components::mqtt::Credentials( username, password ) ); | ||
101 | + std::cout << "Client state : " << m_mqtt_client.state() << std::endl; | ||
102 | + } | ||
103 | + | ||
104 | + void Publisher::publish( const std::string &message_topic, const std::string &message_payload ) | ||
105 | + { | ||
106 | + osdev::components::mqtt::MqttMessage message( message_topic, true, false, message_payload ); | ||
107 | + std::cout << "[Publisher::publish] - Publising message : " << message_payload << " to topic : " << message_topic << std::endl; | ||
108 | + osdev::components::mqtt::Token t_result = m_mqtt_client.publish( message, 0 ); | ||
109 | + } | ||
110 | +``` | ||
111 | + | ||
112 | +## Subscribing | ||
113 | +TO create a subscriber, a bit more work is involved. A subscription is dependant on a callback in which the data is handled to your liking. It is necessary to inherit from MqttSubscriberBase and override the "receive_data" method. | ||
114 | + | ||
115 | +subscriber.h | ||
116 | +``` | ||
117 | +#pragma once | ||
118 | + | ||
119 | +// std | ||
120 | +#include <string> | ||
121 | + | ||
122 | +// mqtt-cpp | ||
123 | +#include "mqttsubscriberbase.h" | ||
124 | + | ||
125 | +class Subscriber : public MqttSubscriberBase | ||
126 | +{ | ||
127 | +public: | ||
128 | + Subscriber( const std::string &client_id ); | ||
129 | + | ||
130 | + virtual ~Subscriber() {} | ||
131 | + | ||
132 | +protected: | ||
133 | + void receive_data( const std::string &message_topic, const std::string &message_payload ); | ||
134 | + | ||
135 | +}; | ||
136 | +``` | ||
137 | + | ||
138 | +In the receive_data, the logic will be implemented to handle, decode and store the payload. | ||
139 | +``` | ||
140 | +#include "subscriber.h" | ||
141 | + | ||
142 | +#include <iostream> | ||
143 | + | ||
144 | +Subscriber::Subscriber( const std::string &client_id ) | ||
145 | + : MqttSubscriberBase( client_id ) | ||
146 | +{ | ||
147 | + | ||
148 | +} | ||
149 | + | ||
150 | +void Subscriber::receive_data( const std::string &message_topic, const std::string &message_payload ) | ||
151 | +{ | ||
152 | + std::cout << "[Subscriber::receive_data] - Received message : " << message_payload << " from topic : " << message_topic << std::endl; | ||
153 | +} | ||
154 | +``` | ||
155 | + | ||
156 | +Now it will be very easy to send and receive messages from a broker without the hassle of administration. |