SNode.C
Loading...
Searching...
No Matches
iot::mqtt::server::broker::Session Class Reference

#include <Session.h>

Inheritance diagram for iot::mqtt::server::broker::Session:
Collaboration diagram for iot::mqtt::server::broker::Session:

Public Member Functions

 Session ()=default
 
 Session (iot::mqtt::server::Mqtt *mqtt)
 
void sendPublish (iot::mqtt::server::broker::Message &message, uint8_t qoS, bool retain)
 
void publishQueued ()
 
Sessionrenew (iot::mqtt::server::Mqtt *mqtt)
 
void retain ()
 
bool isActive () const
 
bool isOwnedBy (const iot::mqtt::server::Mqtt *mqtt) const
 
nlohmann::json toJson () const final
 
void fromJson (const nlohmann::json &json)
 
- Public Member Functions inherited from iot::mqtt::Session
 Session ()=default
 
 Session (const nlohmann::json &json)
 
virtual ~Session ()=default
 
 Session (const Session &)=default
 
Sessionoperator= (const Session &)=default
 
bool isCleanSession () const
 
void fromJson (const nlohmann::json &json)
 
void clear ()
 

Private Attributes

iot::mqtt::server::Mqttmqtt = nullptr
 
std::deque< MessagemessageQueue
 

Detailed Description

Definition at line 40 of file Session.h.

Constructor & Destructor Documentation

◆ Session() [1/2]

iot::mqtt::server::broker::Session::Session ( )
default

◆ Session() [2/2]

iot::mqtt::server::broker::Session::Session ( iot::mqtt::server::Mqtt * mqtt)
explicit

Definition at line 40 of file Session.cpp.

41 : mqtt(mqtt) {
42 }
iot::mqtt::server::Mqtt * mqtt
Definition Session.h:60

Member Function Documentation

◆ fromJson()

void iot::mqtt::server::broker::Session::fromJson ( const nlohmann::json & json)

Definition at line 109 of file Session.cpp.

109 {
110 std::transform(json["message_queue"].begin(),
111 json["message_queue"].end(),
112 std::back_inserter(messageQueue),
113 [](const nlohmann::json& jsonMessage) {
114 return Message().fromJson(jsonMessage);
115 });
116
118 }
void fromJson(const nlohmann::json &json)
Definition Session.cpp:67
std::deque< Message > messageQueue
Definition Session.h:62

◆ isActive()

bool iot::mqtt::server::broker::Session::isActive ( ) const

Definition at line 91 of file Session.cpp.

91 {
92 return mqtt != nullptr;
93 }

Referenced by sendPublish().

Here is the caller graph for this function:

◆ isOwnedBy()

bool iot::mqtt::server::broker::Session::isOwnedBy ( const iot::mqtt::server::Mqtt * mqtt) const

Definition at line 95 of file Session.cpp.

95 {
96 return this->mqtt == mqtt;
97 }

◆ publishQueued()

void iot::mqtt::server::broker::Session::publishQueued ( )

Definition at line 71 of file Session.cpp.

71 {
72 LOG(INFO) << "MQTT Broker: send queued messages ...";
74 sendPublish(message, message.getQoS(), false);
75 }
76 LOG(INFO) << "MQTT Broker: ... done";
77
78 messageQueue.clear();
79 }
void sendPublish(iot::mqtt::server::broker::Message &message, uint8_t qoS, bool retain)
Definition Session.cpp:44

◆ renew()

Session * iot::mqtt::server::broker::Session::renew ( iot::mqtt::server::Mqtt * mqtt)

Definition at line 81 of file Session.cpp.

81 {
82 this->mqtt = mqtt;
83
84 return this;
85 }

◆ retain()

void iot::mqtt::server::broker::Session::retain ( )

Definition at line 87 of file Session.cpp.

87 {
88 this->mqtt = nullptr;
89 }

◆ sendPublish()

void iot::mqtt::server::broker::Session::sendPublish ( iot::mqtt::server::broker::Message & message,
uint8_t qoS,
bool retain )

Definition at line 44 of file Session.cpp.

44 {
45 LOG(INFO) << "MQTT Broker: TopicName: " << message.getTopic();
46 LOG(INFO) << "MQTT Broker: Message:\n" << iot::mqtt::Mqtt::toHexString(message.getMessage());
47 LOG(DEBUG) << "MQTT Broker: QoS: " << static_cast<uint16_t>(std::min(qoS, message.getQoS()));
48
49 if (isActive()) {
50 LOG(DEBUG) << "MQTT Broker: ClientId: " << mqtt->getClientId();
51 LOG(DEBUG) << "MQTT Broker: OriginClientId: " << message.getOriginClientId();
52
53 if ((mqtt->getReflect() || mqtt->getClientId() != message.getOriginClientId())) {
54 mqtt->sendPublish(message.getTopic(),
55 message.getMessage(),
56 std::min(message.getQoS(), qoS),
57 !mqtt->getReflect() ? message.getOriginRetain() || retain : retain);
58 } else {
59 LOG(INFO) << "MQTT Broker: Suppress reflection to origin to avoid message looping";
60 }
61 } else {
62 if (message.getQoS() == 0) {
63 messageQueue.clear();
64 }
65
66 message.setQoS(std::min(message.getQoS(), qoS));
67 messageQueue.emplace_back(message);
68 }
69 }
static std::string toHexString(const std::vector< char > &data)
Definition Mqtt.cpp:367
void sendPublish(const std::string &topic, const std::string &message, uint8_t qoS, bool retain)
Definition Mqtt.cpp:195
bool getReflect() const
Definition Mqtt.cpp:402
std::string getClientId() const
Definition Mqtt.cpp:358
const std::string & getOriginClientId() const
Definition Message.cpp:40
const std::string & getTopic() const
Definition Message.cpp:44
const std::string & getMessage() const
Definition Message.cpp:52

References iot::mqtt::server::broker::Message::getOriginRetain(), iot::mqtt::server::broker::Message::getQoS(), iot::mqtt::server::Mqtt::getReflect(), isActive(), and iot::mqtt::server::broker::Message::setQoS().

Here is the call graph for this function:

◆ toJson()

nlohmann::json iot::mqtt::server::broker::Session::toJson ( ) const
finalvirtual

Reimplemented from iot::mqtt::Session.

Definition at line 99 of file Session.cpp.

99 {
100 nlohmann::json json = iot::mqtt::Session::toJson();
101
102 std::transform(messageQueue.begin(), messageQueue.end(), std::back_inserter(json["message_queue"]), [](const Message& message) {
103 return message.toJson();
104 });
105
106 return json;
107 }
virtual nlohmann::json toJson() const
Definition Session.cpp:37

Member Data Documentation

◆ messageQueue

std::deque<Message> iot::mqtt::server::broker::Session::messageQueue
private

Definition at line 62 of file Session.h.

◆ mqtt

iot::mqtt::server::Mqtt* iot::mqtt::server::broker::Session::mqtt = nullptr
private

Definition at line 60 of file Session.h.


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