MQTTSuite
Loading...
Searching...
No Matches
mqtt::mqttcli::lib::Mqtt Class Reference

#include <Mqtt.h>

Inheritance diagram for mqtt::mqttcli::lib::Mqtt:
Collaboration diagram for mqtt::mqttcli::lib::Mqtt:

Public Member Functions

 Mqtt (const std::string &connectionName, const std::string &clientId, uint8_t qoSDefault, uint16_t keepAlive, bool cleanSession, const std::string &willTopic, const std::string &willMessage, uint8_t willQoS, bool willRetain, const std::string &username, const std::string &password, const std::list< std::string > &subTopics, const std::string &pubTopic, const std::string &pubMessage, bool pubRetain=false, const std::string &sessionStoreFileName="")

Private Types

using Super = iot::mqtt::client::Mqtt

Private Member Functions

void onConnected () final
bool onSignal (int signum) final
void onPublish (const iot::mqtt::packets::Publish &publish) final
void onConnack (const iot::mqtt::packets::Connack &connack) final
void onSuback (const iot::mqtt::packets::Suback &suback) final
void onPuback (const iot::mqtt::packets::Puback &puback) final
void onPubcomp (const iot::mqtt::packets::Pubcomp &pubcomp) final

Private Attributes

const uint8_t qoSDefault
const bool cleanSession
const std::string willTopic
const std::string willMessage
const uint8_t willQoS
const bool willRetain
const std::string username
const std::string password
const std::list< std::string > subTopics
const std::string pubTopic
const std::string pubMessage
const bool pubRetain

Detailed Description

Definition at line 57 of file Mqtt.h.

Member Typedef Documentation

◆ Super

using mqtt::mqttcli::lib::Mqtt::Super = iot::mqtt::client::Mqtt
private

Definition at line 77 of file Mqtt.h.

Constructor & Destructor Documentation

◆ Mqtt()

mqtt::mqttcli::lib::Mqtt::Mqtt ( const std::string & connectionName,
const std::string & clientId,
uint8_t qoSDefault,
uint16_t keepAlive,
bool cleanSession,
const std::string & willTopic,
const std::string & willMessage,
uint8_t willQoS,
bool willRetain,
const std::string & username,
const std::string & password,
const std::list< std::string > & subTopics,
const std::string & pubTopic,
const std::string & pubMessage,
bool pubRetain = false,
const std::string & sessionStoreFileName = "" )
explicit

Definition at line 217 of file Mqtt.cpp.

233 : iot::mqtt::client::Mqtt(connectionName, clientId, keepAlive, sessionStoreFileName)
246 VLOG(1) << "Client Id: " << clientId;
247 VLOG(1) << " Keep Alive: " << keepAlive;
248 VLOG(1) << " Clean Session: " << cleanSession;
249 VLOG(1) << " Will Topic: " << willTopic;
250 VLOG(1) << " Will Message: " << willMessage;
251 VLOG(1) << " Will QoS: " << static_cast<uint16_t>(willQoS);
252 VLOG(1) << " Will Retain " << willRetain;
253 VLOG(1) << " Username: " << username;
254 VLOG(1) << " Password: " << password;
255 }
const std::string willTopic
Definition Mqtt.h:91
const uint8_t qoSDefault
Definition Mqtt.h:88
const bool willRetain
Definition Mqtt.h:94
const std::string username
Definition Mqtt.h:95
const uint8_t willQoS
Definition Mqtt.h:93
const std::string password
Definition Mqtt.h:96
const std::list< std::string > subTopics
Definition Mqtt.h:98
const bool cleanSession
Definition Mqtt.h:89
const std::string pubMessage
Definition Mqtt.h:100
const bool pubRetain
Definition Mqtt.h:101
const std::string pubTopic
Definition Mqtt.h:99
const std::string willMessage
Definition Mqtt.h:92

References cleanSession, password, pubMessage, pubRetain, pubTopic, qoSDefault, subTopics, username, willMessage, willQoS, willRetain, and willTopic.

Referenced by mqtt::mqttcli::SocketContextFactory::create().

Here is the caller graph for this function:

Member Function Documentation

◆ onConnack()

void mqtt::mqttcli::lib::Mqtt::onConnack ( const iot::mqtt::packets::Connack & connack)
finalprivate

Definition at line 282 of file Mqtt.cpp.

282 {
283 if (connack.getReturnCode() == 0) {
284 bool sendDisconnectFlag = true;
285
286 if (!subTopics.empty()) {
287 VLOG(0) << "MQTT Subscribe";
288
289 try {
290 std::list<iot::mqtt::Topic> topicList;
291 std::transform(subTopics.begin(),
292 subTopics.end(),
293 std::back_inserter(topicList),
294 [qoSDefault = this->qoSDefault](const std::string& compositTopic) -> iot::mqtt::Topic {
295 std::size_t pos = compositTopic.rfind("##");
296
297 const std::string topic = compositTopic.substr(0, pos);
298 uint8_t qoS = qoSDefault;
299
300 if (pos != std::string::npos) {
301 try {
302 qoS = getQos(compositTopic.substr(pos + 2));
303 } catch (const std::logic_error& error) {
304 VLOG(0) << "[" << Color::Code::FG_RED << "Error" << Color::Code::FG_DEFAULT
305 << "] Malformed composit topic: " << compositTopic << "\n"
306 << error.what();
307 throw;
308 }
309 }
310 VLOG(0) << " t: " << static_cast<int>(qoS) << " | " << topic;
311 return iot::mqtt::Topic(topic, qoS);
312 });
313 sendSubscribe(topicList);
314
315 sendDisconnectFlag = false;
316 } catch (const std::logic_error&) {
317 }
318 }
319
320 if (!pubTopic.empty()) {
321 VLOG(0) << "MQTT Publish";
322
323 std::size_t pos = pubTopic.rfind("##");
324
325 const std::string topic = pubTopic.substr(0, pos);
326
327 uint8_t qoS = qoSDefault;
328
329 try {
330 if (pos != std::string::npos) {
331 try {
332 qoS = getQos(pubTopic.substr(pos + 2));
333 } catch (const std::logic_error& error) {
334 VLOG(0) << "[" << Color::Code::FG_RED << "Error" << Color::Code::FG_DEFAULT
335 << "] Malformed composit topic: " << pubTopic << "\n"
336 << error.what();
337 throw;
338 }
339 }
340 sendPublish(topic, pubMessage, qoS, pubRetain);
341
342 sendDisconnectFlag = qoS > 0 ? false : sendDisconnectFlag;
343 } catch (const std::logic_error&) {
344 }
345 }
346 if (sendDisconnectFlag) {
347 sendDisconnect();
348 }
349 } else {
350 sendDisconnect();
351 }
352 }
static uint8_t getQos(const std::string &qoSString)
Definition Mqtt.cpp:272

References mqtt::mqttcli::lib::getQos(), pubMessage, pubRetain, pubTopic, qoSDefault, and subTopics.

Here is the call graph for this function:

◆ onConnected()

void mqtt::mqttcli::lib::Mqtt::onConnected ( )
finalprivate

Definition at line 257 of file Mqtt.cpp.

257 {
258 VLOG(1) << "MQTT: Initiating Session";
259
261 }

References cleanSession, password, username, willMessage, willQoS, willRetain, and willTopic.

◆ onPuback()

void mqtt::mqttcli::lib::Mqtt::onPuback ( const iot::mqtt::packets::Puback & puback)
finalprivate

Definition at line 371 of file Mqtt.cpp.

371 {
372 if (subTopics.empty()) {
373 sendDisconnect();
374 }
375 }

References subTopics.

◆ onPubcomp()

void mqtt::mqttcli::lib::Mqtt::onPubcomp ( const iot::mqtt::packets::Pubcomp & pubcomp)
finalprivate

Definition at line 377 of file Mqtt.cpp.

377 {
378 if (subTopics.empty()) {
379 sendDisconnect();
380 }
381 }

References subTopics.

◆ onPublish()

void mqtt::mqttcli::lib::Mqtt::onPublish ( const iot::mqtt::packets::Publish & publish)
finalprivate

Definition at line 362 of file Mqtt.cpp.

362 {
363 std::string prefix = "MQTT Publish";
364 std::string headLine = publish.getTopic() + " │ QoS: " + std::to_string(static_cast<uint16_t>(publish.getQoS())) +
365 " │ Retain: " + (publish.getRetain() != 0 ? "true" : "false") +
366 " │ Dup: " + (publish.getDup() != 0 ? "true" : "false");
367
368 VLOG(0) << formatAsLogString(prefix, headLine, publish.getMessage());
369 }
static const std::string formatAsLogString(const std::string &prefix, const std::string &headLine, const std::string &message)
Definition Mqtt.cpp:201

References formatAsLogString().

Here is the call graph for this function:

◆ onSignal()

bool mqtt::mqttcli::lib::Mqtt::onSignal ( int signum)
nodiscardfinalprivate

Definition at line 263 of file Mqtt.cpp.

263 {
264 VLOG(1) << "MQTT: On Exit due to '" << strsignal(signum) << "' (SIG" << utils::system::sigabbrev_np(signum) << " = " << signum
265 << ")";
266
267 sendDisconnect();
268
269 return Super::onSignal(signum);
270 }

◆ onSuback()

void mqtt::mqttcli::lib::Mqtt::onSuback ( const iot::mqtt::packets::Suback & suback)
finalprivate

Definition at line 354 of file Mqtt.cpp.

354 {
355 VLOG(1) << "MQTT Suback";
356
357 for (auto returnCode : suback.getReturnCodes()) {
358 VLOG(0) << " r: " << static_cast<int>(returnCode);
359 }
360 }

Member Data Documentation

◆ cleanSession

const bool mqtt::mqttcli::lib::Mqtt::cleanSession
private

Definition at line 89 of file Mqtt.h.

Referenced by Mqtt(), and onConnected().

◆ password

const std::string mqtt::mqttcli::lib::Mqtt::password
private

Definition at line 96 of file Mqtt.h.

Referenced by Mqtt(), and onConnected().

◆ pubMessage

const std::string mqtt::mqttcli::lib::Mqtt::pubMessage
private

Definition at line 100 of file Mqtt.h.

Referenced by Mqtt(), and onConnack().

◆ pubRetain

const bool mqtt::mqttcli::lib::Mqtt::pubRetain
private

Definition at line 101 of file Mqtt.h.

Referenced by Mqtt(), and onConnack().

◆ pubTopic

const std::string mqtt::mqttcli::lib::Mqtt::pubTopic
private

Definition at line 99 of file Mqtt.h.

Referenced by Mqtt(), and onConnack().

◆ qoSDefault

const uint8_t mqtt::mqttcli::lib::Mqtt::qoSDefault
private

Definition at line 88 of file Mqtt.h.

Referenced by Mqtt(), and onConnack().

◆ subTopics

const std::list<std::string> mqtt::mqttcli::lib::Mqtt::subTopics
private

Definition at line 98 of file Mqtt.h.

Referenced by Mqtt(), onConnack(), onPuback(), and onPubcomp().

◆ username

const std::string mqtt::mqttcli::lib::Mqtt::username
private

Definition at line 95 of file Mqtt.h.

Referenced by Mqtt(), and onConnected().

◆ willMessage

const std::string mqtt::mqttcli::lib::Mqtt::willMessage
private

Definition at line 92 of file Mqtt.h.

Referenced by Mqtt(), and onConnected().

◆ willQoS

const uint8_t mqtt::mqttcli::lib::Mqtt::willQoS
private

Definition at line 93 of file Mqtt.h.

Referenced by Mqtt(), and onConnected().

◆ willRetain

const bool mqtt::mqttcli::lib::Mqtt::willRetain
private

Definition at line 94 of file Mqtt.h.

Referenced by Mqtt(), and onConnected().

◆ willTopic

const std::string mqtt::mqttcli::lib::Mqtt::willTopic
private

Definition at line 91 of file Mqtt.h.

Referenced by Mqtt(), and onConnected().


The documentation for this class was generated from the following files: