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 | 41 | Open terminal 2 |
42 | 42 | $ bin/test_mqtt_pub |
43 | 43 | ``` |
44 | -Screen 2 is sending, Screen 1 is receiving. | |
45 | 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. | ... | ... |