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 61 of file SubProtocol.h.

Member Typedef Documentation

◆ WSSubProtocolRole

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

Definition at line 65 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 37 of file SubProtocol.hpp.

40 : WSSubProtocolRole(subProtocolContext, name, 0)
42 , onReceivedFromPeerEvent([this]([[maybe_unused]] const utils::Timeval& currentTime) {
44
45 if (size > 0) {
47 } else {
48 buffer.clear();
49 cursor = 0;
50 }
51 }) {
52 }
std::size_t onReceivedFromPeer()
WSSubProtocolRoleT WSSubProtocolRole
Definition SubProtocol.h:65
std::vector< char > buffer
Definition SubProtocol.h:91
OnReceivedFromPeerEvent onReceivedFromPeerEvent
Definition SubProtocol.h:88

◆ ~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 77 of file SubProtocol.hpp.

77 {
78 WSSubProtocolRole::sendClose();
79 }

◆ end()

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

Implements iot::mqtt::MqttContext.

Definition at line 72 of file SubProtocol.hpp.

72 {
73 WSSubProtocolRole::sendClose();
74 }

◆ getSocketConnection()

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

Implements iot::mqtt::MqttContext.

Definition at line 146 of file SubProtocol.hpp.

146 {
147 return WSSubProtocolRole::subProtocolContext->getSocketConnection();
148 }

◆ onConnected()

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

Definition at line 82 of file SubProtocol.hpp.

82 {
83 LOG(INFO) << getSocketConnection()->getConnectionName() << " WSMQTT: connected:";
85 }
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 129 of file SubProtocol.hpp.

129 {
131 LOG(DEBUG) << getSocketConnection()->getConnectionName() << " WSMQTT: disconnected:";
132 }

◆ onMessageData()

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

Definition at line 98 of file SubProtocol.hpp.

98 {
99 data.append(std::string(chunk, chunkLen));
100
101 LOG(DEBUG) << getSocketConnection()->getConnectionName() << " WebSocket: Frame Data:\n"
102 << std::string(32, ' ').append(utils::hexDump(std::vector<char>(chunk, chunk + chunkLen), 32));
103 }
std::string hexDump(const std::vector< char > &bytes, int prefixLength, bool prefixAtFirstLine)
Definition hexdump.cpp:36

◆ onMessageEnd()

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

Definition at line 106 of file SubProtocol.hpp.

106 {
107 LOG(DEBUG) << getSocketConnection()->getConnectionName() << " WSMQTT: Message END";
108
109 buffer.insert(buffer.end(), data.begin(), data.end());
110 size += data.size();
111 data.clear();
112
114
115 if (size > 0) {
117 } else {
118 buffer.clear();
119 cursor = 0;
120 }
121 }

◆ onMessageError()

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

Definition at line 124 of file SubProtocol.hpp.

124 {
125 LOG(ERROR) << getSocketConnection()->getConnectionName() << " WSMQTT: Message error: " << errnum;
126 }

◆ onMessageStart()

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

Definition at line 88 of file SubProtocol.hpp.

88 {
90 LOG(ERROR) << getSocketConnection()->getConnectionName() << " WSMQTT: Wrong Opcode: " << opCode;
91 this->end(true);
92 } else {
93 LOG(DEBUG) << getSocketConnection()->getConnectionName() << " WSMQTT: Message START: " << opCode;
94 }
95 }
void end(bool fatal=false) override

◆ onSignal()

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

Definition at line 135 of file SubProtocol.hpp.

135 {
136 bool ret = iot::mqtt::MqttContext::onSignal(sig);
137 LOG(INFO) << getSocketConnection()->getConnectionName() << " WSMQTT: exit due to '" << strsignal(sig) << "' (SIG"
138 << utils::system::sigabbrev_np(sig) << " = " << sig << ")";
139
140 this->sendClose();
141
142 return ret;
143 }
std::string sigabbrev_np(int sig)
Definition signal.cpp:37

◆ 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 55 of file SubProtocol.hpp.

55 {
56 std::size_t maxReturn = std::min(chunklen, size);
57
58 std::copy(buffer.data() + cursor, buffer.data() + cursor + maxReturn, chunk);
59
60 cursor += maxReturn;
61 size -= maxReturn;
62
63 return maxReturn;
64 }

◆ 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 67 of file SubProtocol.hpp.

67 {
68 WSSubProtocolRole::sendMessage(chunk, chunklen);
69 }

Member Data Documentation

◆ buffer

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

Definition at line 91 of file SubProtocol.h.

◆ cursor

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

Definition at line 92 of file SubProtocol.h.

◆ data

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

Definition at line 90 of file SubProtocol.h.

◆ onReceivedFromPeerEvent

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

Definition at line 88 of file SubProtocol.h.

◆ size

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

Definition at line 93 of file SubProtocol.h.


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