SNode.C
Loading...
Searching...
No Matches
iot::mqtt::SubProtocol< WSSubProtocolRoleT > Class Template Reference

#include <SubProtocol.h>

Inheritance diagram for iot::mqtt::SubProtocol< WSSubProtocolRoleT >:
Collaboration diagram for iot::mqtt::SubProtocol< WSSubProtocolRoleT >:

Public Member Functions

 SubProtocol (web::websocket::SubProtocolContext *subProtocolContext, const std::string &name, iot::mqtt::Mqtt *mqtt)
 
 ~SubProtocol () override=default
 
std::size_t recv (char *chunk, std::size_t chunklen) override
 
void send (const char *chunk, std::size_t chunklen) override
 
void end (bool fatal=false) override
 
void close () override
 

Private Types

using WSSubProtocolRole = WSSubProtocolRoleT
 

Private Member Functions

void onConnected () override
 
void onMessageStart (int opCode) override
 
void onMessageData (const char *chunk, std::size_t chunkLen) override
 
void onMessageEnd () override
 
void onMessageError (uint16_t errnum) override
 
void onDisconnected () override
 
bool onSignal (int sig) override
 
core::socket::stream::SocketConnectiongetSocketConnection () const override
 
- Private Member Functions inherited from iot::mqtt::MqttContext
 MqttContext (Mqtt *mqtt)
 
 MqttContext (const MqttContext &)=default
 
MqttContextoperator= (const MqttContext &)=default
 
virtual ~MqttContext ()
 
void onConnected ()
 
std::size_t onReceivedFromPeer ()
 
void onDisconnected ()
 
bool onSignal (int sig)
 

Private Attributes

OnReceivedFromPeerEvent onReceivedFromPeerEvent
 
std::string data
 
std::vector< char > buffer
 
std::size_t cursor = 0
 
std::size_t size = 0
 
- Private Attributes inherited from iot::mqtt::MqttContext
Mqttmqtt
 

Detailed Description

template<typename WSSubProtocolRoleT>
class iot::mqtt::SubProtocol< WSSubProtocolRoleT >

Definition at line 83 of file SubProtocol.h.

Member Typedef Documentation

◆ WSSubProtocolRole

template<typename WSSubProtocolRoleT >
using iot::mqtt::SubProtocol< WSSubProtocolRoleT >::WSSubProtocolRole = WSSubProtocolRoleT
private

Definition at line 87 of file SubProtocol.h.

Constructor & Destructor Documentation

◆ SubProtocol()

template<typename WSSubProtocolRole >
iot::mqtt::SubProtocol< WSSubProtocolRole >::SubProtocol ( web::websocket::SubProtocolContext * subProtocolContext,
const std::string & name,
iot::mqtt::Mqtt * mqtt )

Definition at line 59 of file SubProtocol.hpp.

62 : WSSubProtocolRole(subProtocolContext, name, 0)
64 , onReceivedFromPeerEvent([this]([[maybe_unused]] const utils::Timeval& currentTime) {
66
67 if (size > 0) {
69 } else {
70 buffer.clear();
71 cursor = 0;
72 }
73 }) {
74 }
std::size_t onReceivedFromPeer()
WSSubProtocolRoleT WSSubProtocolRole
Definition SubProtocol.h:87
std::vector< char > buffer
OnReceivedFromPeerEvent onReceivedFromPeerEvent

◆ ~SubProtocol()

template<typename WSSubProtocolRoleT >
iot::mqtt::SubProtocol< WSSubProtocolRoleT >::~SubProtocol ( )
overridedefault

Member Function Documentation

◆ close()

template<typename WSSubProtocolRole >
void iot::mqtt::SubProtocol< WSSubProtocolRole >::close ( )
overridevirtual

Implements iot::mqtt::MqttContext.

Definition at line 99 of file SubProtocol.hpp.

99 {
100 WSSubProtocolRole::sendClose();
101 }

◆ end()

template<typename WSSubProtocolRole >
void iot::mqtt::SubProtocol< WSSubProtocolRole >::end ( bool fatal = false)
overridevirtual

Implements iot::mqtt::MqttContext.

Definition at line 94 of file SubProtocol.hpp.

94 {
95 WSSubProtocolRole::sendClose();
96 }

◆ getSocketConnection()

template<typename WSSubProtocolRole >
core::socket::stream::SocketConnection * iot::mqtt::SubProtocol< WSSubProtocolRole >::getSocketConnection ( ) const
overrideprivatevirtual

Implements iot::mqtt::MqttContext.

Definition at line 168 of file SubProtocol.hpp.

168 {
169 return WSSubProtocolRole::subProtocolContext->getSocketConnection();
170 }

◆ onConnected()

template<typename WSSubProtocolRole >
void iot::mqtt::SubProtocol< WSSubProtocolRole >::onConnected ( )
overrideprivate

Definition at line 104 of file SubProtocol.hpp.

104 {
105 LOG(INFO) << getSocketConnection()->getConnectionName() << " WSMQTT: connected:";
107 }
const std::string & getConnectionName() const
core::socket::stream::SocketConnection * getSocketConnection() const override

◆ onDisconnected()

template<typename WSSubProtocolRole >
void iot::mqtt::SubProtocol< WSSubProtocolRole >::onDisconnected ( )
overrideprivate

Definition at line 151 of file SubProtocol.hpp.

151 {
153 LOG(DEBUG) << getSocketConnection()->getConnectionName() << " WSMQTT: disconnected:";
154 }

◆ onMessageData()

template<typename WSSubProtocolRole >
void iot::mqtt::SubProtocol< WSSubProtocolRole >::onMessageData ( const char * chunk,
std::size_t chunkLen )
overrideprivate

Definition at line 120 of file SubProtocol.hpp.

120 {
121 data.append(std::string(chunk, chunkLen));
122
123 LOG(DEBUG) << getSocketConnection()->getConnectionName() << " WebSocket: Frame Data:\n"
124 << std::string(32, ' ').append(utils::hexDump(std::vector<char>(chunk, chunk + chunkLen), 32));
125 }
std::string hexDump(const std::vector< char > &bytes, int prefixLength, bool prefixAtFirstLine)
Definition hexdump.cpp:58

◆ onMessageEnd()

template<typename WSSubProtocolRole >
void iot::mqtt::SubProtocol< WSSubProtocolRole >::onMessageEnd ( )
overrideprivate

Definition at line 128 of file SubProtocol.hpp.

128 {
129 LOG(DEBUG) << getSocketConnection()->getConnectionName() << " WSMQTT: Message END";
130
131 buffer.insert(buffer.end(), data.begin(), data.end());
132 size += data.size();
133 data.clear();
134
136
137 if (size > 0) {
139 } else {
140 buffer.clear();
141 cursor = 0;
142 }
143 }

◆ onMessageError()

template<typename WSSubProtocolRole >
void iot::mqtt::SubProtocol< WSSubProtocolRole >::onMessageError ( uint16_t errnum)
overrideprivate

Definition at line 146 of file SubProtocol.hpp.

146 {
147 LOG(ERROR) << getSocketConnection()->getConnectionName() << " WSMQTT: Message error: " << errnum;
148 }

◆ onMessageStart()

template<typename WSSubProtocolRole >
void iot::mqtt::SubProtocol< WSSubProtocolRole >::onMessageStart ( int opCode)
overrideprivate

Definition at line 110 of file SubProtocol.hpp.

110 {
112 LOG(ERROR) << getSocketConnection()->getConnectionName() << " WSMQTT: Wrong Opcode: " << opCode;
113 this->end(true);
114 } else {
115 LOG(DEBUG) << getSocketConnection()->getConnectionName() << " WSMQTT: Message START: " << opCode;
116 }
117 }
void end(bool fatal=false) override

◆ onSignal()

template<typename WSSubProtocolRole >
bool iot::mqtt::SubProtocol< WSSubProtocolRole >::onSignal ( int sig)
overrideprivate

Definition at line 157 of file SubProtocol.hpp.

157 {
158 bool ret = iot::mqtt::MqttContext::onSignal(sig);
159 LOG(INFO) << getSocketConnection()->getConnectionName() << " WSMQTT: exit due to '" << strsignal(sig) << "' (SIG"
160 << utils::system::sigabbrev_np(sig) << " = " << sig << ")";
161
162 this->sendClose();
163
164 return ret;
165 }
std::string sigabbrev_np(int sig)
Definition signal.cpp:59

◆ recv()

template<typename WSSubProtocolRole >
std::size_t iot::mqtt::SubProtocol< WSSubProtocolRole >::recv ( char * chunk,
std::size_t chunklen )
overridevirtual

Implements iot::mqtt::MqttContext.

Definition at line 77 of file SubProtocol.hpp.

77 {
78 std::size_t maxReturn = std::min(chunklen, size);
79
80 std::copy(buffer.data() + cursor, buffer.data() + cursor + maxReturn, chunk);
81
82 cursor += maxReturn;
83 size -= maxReturn;
84
85 return maxReturn;
86 }

◆ send()

template<typename WSSubProtocolRole >
void iot::mqtt::SubProtocol< WSSubProtocolRole >::send ( const char * chunk,
std::size_t chunklen )
overridevirtual

Implements iot::mqtt::MqttContext.

Definition at line 89 of file SubProtocol.hpp.

89 {
90 WSSubProtocolRole::sendMessage(chunk, chunklen);
91 }

Member Data Documentation

◆ buffer

template<typename WSSubProtocolRoleT >
std::vector<char> iot::mqtt::SubProtocol< WSSubProtocolRoleT >::buffer
private

Definition at line 113 of file SubProtocol.h.

◆ cursor

template<typename WSSubProtocolRoleT >
std::size_t iot::mqtt::SubProtocol< WSSubProtocolRoleT >::cursor = 0
private

Definition at line 114 of file SubProtocol.h.

◆ data

template<typename WSSubProtocolRoleT >
std::string iot::mqtt::SubProtocol< WSSubProtocolRoleT >::data
private

Definition at line 112 of file SubProtocol.h.

◆ onReceivedFromPeerEvent

template<typename WSSubProtocolRoleT >
OnReceivedFromPeerEvent iot::mqtt::SubProtocol< WSSubProtocolRoleT >::onReceivedFromPeerEvent
private

Definition at line 110 of file SubProtocol.h.

◆ size

template<typename WSSubProtocolRoleT >
std::size_t iot::mqtt::SubProtocol< WSSubProtocolRoleT >::size = 0
private

Definition at line 115 of file SubProtocol.h.


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