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 220 of file Mqtt.cpp.

236 : iot::mqtt::client::Mqtt(connectionName, clientId, keepAlive, sessionStoreFileName)
249 VLOG(1) << "Client Id: " << clientId;
250 VLOG(1) << " Keep Alive: " << keepAlive;
251 VLOG(1) << " Clean Session: " << cleanSession;
252 VLOG(1) << " Will Topic: " << willTopic;
253 VLOG(1) << " Will Message: " << willMessage;
254 VLOG(1) << " Will QoS: " << static_cast<uint16_t>(willQoS);
255 VLOG(1) << " Will Retain " << willRetain;
256 VLOG(1) << " Username: " << username;
257 VLOG(1) << " Password: " << password;
258 }
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 285 of file Mqtt.cpp.

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

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 260 of file Mqtt.cpp.

260 {
261 VLOG(1) << "MQTT: Initiating Session";
262
264 }

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 374 of file Mqtt.cpp.

374 {
375 if (subTopics.empty()) {
376 sendDisconnect();
377 }
378 }

References subTopics.

◆ onPubcomp()

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

Definition at line 380 of file Mqtt.cpp.

380 {
381 if (subTopics.empty()) {
382 sendDisconnect();
383 }
384 }

References subTopics.

◆ onPublish()

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

Definition at line 365 of file Mqtt.cpp.

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

References formatAsLogString().

Here is the call graph for this function:

◆ onSignal()

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

Definition at line 266 of file Mqtt.cpp.

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

◆ onSuback()

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

Definition at line 357 of file Mqtt.cpp.

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

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: