SNode.C
Loading...
Searching...
No Matches
web::websocket::SubProtocol< SocketContextUpgradeT > Class Template Referenceabstract

#include <SubProtocol.h>

Collaboration diagram for web::websocket::SubProtocol< SocketContextUpgradeT >:

Public Member Functions

 SubProtocol (SubProtocol &)=delete
 
 SubProtocol (SubProtocol &&)=delete
 
SubProtocoloperator= (SubProtocol &)=delete
 
SubProtocoloperator= (SubProtocol &&)=delete
 
void sendMessage (const char *message, std::size_t messageLength) const
 
void sendMessage (const std::string &message) const
 
void sendMessageStart (const char *message, std::size_t messageLength) const
 
void sendMessageStart (const std::string &message) const
 
void sendMessageFrame (const char *message, std::size_t messageLength) const
 
void sendMessageFrame (const std::string &message) const
 
void sendMessageEnd (const char *message, std::size_t messageLength) const
 
void sendMessageEnd (const std::string &message) const
 
void sendPing (const char *reason=nullptr, std::size_t reasonLength=0) const
 
void sendClose (uint16_t statusCode=1000, const char *reason=nullptr, std::size_t reasonLength=0)
 
const std::string & getName ()
 
core::socket::stream::SocketConnectiongetSocketConnection () const
 

Protected Member Functions

 SubProtocol (SubProtocolContext *subProtocolContext, const std::string &name, int pingInterval=60, int maxFlyingPings=3)
 
virtual ~SubProtocol ()
 

Protected Attributes

SubProtocolContextsubProtocolContext
 

Private Types

using SocketContextUpgrade = SocketContextUpgradeT
 

Private Member Functions

virtual void onConnected ()=0
 
virtual void onDisconnected ()=0
 
virtual bool onSignal (int sig)=0
 
virtual void onMessageStart (int opCode)=0
 
virtual void onMessageData (const char *chunk, std::size_t chunkLen)=0
 
virtual void onMessageEnd ()=0
 
virtual void onMessageError (uint16_t errnum)=0
 
virtual void onPongReceived ()
 

Private Attributes

const std::string name
 
core::timer::Timer pingTimer
 
int flyingPings = 0
 

Friends

template<typename SubProtocolT , typename RequestT , typename ResponseT >
class web::websocket::SocketContextUpgrade
 

Detailed Description

template<typename SocketContextUpgradeT>
class web::websocket::SubProtocol< SocketContextUpgradeT >

Definition at line 46 of file SubProtocol.h.

Member Typedef Documentation

◆ SocketContextUpgrade

template<typename SocketContextUpgradeT >
using web::websocket::SubProtocol< SocketContextUpgradeT >::SocketContextUpgrade = SocketContextUpgradeT
private

Definition at line 55 of file SubProtocol.h.

Constructor & Destructor Documentation

◆ SubProtocol() [1/3]

template<typename SocketContextUpgradeT >
web::websocket::SubProtocol< SocketContextUpgradeT >::SubProtocol ( SubProtocol< SocketContextUpgradeT > & )
delete

◆ SubProtocol() [2/3]

template<typename SocketContextUpgradeT >
web::websocket::SubProtocol< SocketContextUpgradeT >::SubProtocol ( SubProtocol< SocketContextUpgradeT > && )
delete

◆ SubProtocol() [3/3]

template<typename SocketContextUpgrade >
web::websocket::SubProtocol< SocketContextUpgrade >::SubProtocol ( SubProtocolContext * subProtocolContext,
const std::string & name,
int pingInterval = 60,
int maxFlyingPings = 3 )
protected

Definition at line 37 of file SubProtocol.hpp.

41 : name(name)
43 if (pingInterval > 0) {
45 [this, maxFlyingPings](const std::function<void()>& stop) {
46 if (flyingPings < maxFlyingPings) {
47 sendPing();
49 } else {
50 LOG(WARNING) << getSocketConnection()->getConnectionName() << " WebSocket: MaxFlyingPings exceeded - closing";
51
52 sendClose();
53 stop();
54 }
55 },
56 pingInterval);
57 }
58
60 }
virtual void setTimeout(const utils::Timeval &timeout)=0
const std::string & getConnectionName() const
static Timer intervalTimer(const std::function< void(const std::function< void()> &)> &dispatcher, const utils::Timeval &timeout)
Definition Timer.cpp:39
core::socket::stream::SocketConnection * getSocketConnection() const
void sendPing(const char *reason=nullptr, std::size_t reasonLength=0) const
SubProtocolContext * subProtocolContext
Definition SubProtocol.h:96
void sendClose(uint16_t statusCode=1000, const char *reason=nullptr, std::size_t reasonLength=0)
const std::string name
Definition SubProtocol.h:93
core::timer::Timer pingTimer
Definition SubProtocol.h:99

◆ ~SubProtocol()

Reimplemented in web::websocket::client::SubProtocol, and web::websocket::server::SubProtocol.

Definition at line 63 of file SubProtocol.hpp.

63 {
65 }
void cancel()
Definition Timer.cpp:62

Member Function Documentation

◆ getName()

template<typename SocketContextUpgrade >
const std::string & web::websocket::SubProtocol< SocketContextUpgrade >::getName ( )

Definition at line 127 of file SubProtocol.hpp.

127 {
128 return name;
129 }

◆ getSocketConnection()

Definition at line 132 of file SubProtocol.hpp.

132 {
134 }
virtual core::socket::stream::SocketConnection * getSocketConnection()=0

◆ onConnected()

template<typename SocketContextUpgradeT >
virtual void web::websocket::SubProtocol< SocketContextUpgradeT >::onConnected ( )
privatepure virtual

◆ onDisconnected()

template<typename SocketContextUpgradeT >
virtual void web::websocket::SubProtocol< SocketContextUpgradeT >::onDisconnected ( )
privatepure virtual

◆ onMessageData()

template<typename SocketContextUpgradeT >
virtual void web::websocket::SubProtocol< SocketContextUpgradeT >::onMessageData ( const char * chunk,
std::size_t chunkLen )
privatepure virtual

◆ onMessageEnd()

template<typename SocketContextUpgradeT >
virtual void web::websocket::SubProtocol< SocketContextUpgradeT >::onMessageEnd ( )
privatepure virtual

◆ onMessageError()

template<typename SocketContextUpgradeT >
virtual void web::websocket::SubProtocol< SocketContextUpgradeT >::onMessageError ( uint16_t errnum)
privatepure virtual

◆ onMessageStart()

template<typename SocketContextUpgradeT >
virtual void web::websocket::SubProtocol< SocketContextUpgradeT >::onMessageStart ( int opCode)
privatepure virtual

◆ onPongReceived()

template<typename SocketContextUpgrade >
void web::websocket::SubProtocol< SocketContextUpgrade >::onPongReceived ( )
privatevirtual

Definition at line 120 of file SubProtocol.hpp.

120 {
121 LOG(DEBUG) << subProtocolContext->getSocketConnection()->getConnectionName() << " WebSocket: Pong received";
122
123 flyingPings = 0;
124 }

◆ onSignal()

template<typename SocketContextUpgradeT >
virtual bool web::websocket::SubProtocol< SocketContextUpgradeT >::onSignal ( int sig)
privatepure virtual

◆ operator=() [1/2]

template<typename SocketContextUpgradeT >
SubProtocol & web::websocket::SubProtocol< SocketContextUpgradeT >::operator= ( SubProtocol< SocketContextUpgradeT > && )
delete

◆ operator=() [2/2]

template<typename SocketContextUpgradeT >
SubProtocol & web::websocket::SubProtocol< SocketContextUpgradeT >::operator= ( SubProtocol< SocketContextUpgradeT > & )
delete

◆ sendClose()

template<typename SocketContextUpgrade >
void web::websocket::SubProtocol< SocketContextUpgrade >::sendClose ( uint16_t statusCode = 1000,
const char * reason = nullptr,
std::size_t reasonLength = 0 )

Definition at line 115 of file SubProtocol.hpp.

115 {
116 subProtocolContext->sendClose(statusCode, reason, reasonLength);
117 }
virtual void sendClose(uint16_t statusCode=1000, const char *reason=nullptr, std::size_t reasonLength=0)=0

◆ sendMessage() [1/2]

template<typename SocketContextUpgrade >
void web::websocket::SubProtocol< SocketContextUpgrade >::sendMessage ( const char * message,
std::size_t messageLength ) const

Definition at line 68 of file SubProtocol.hpp.

68 {
69 subProtocolContext->sendMessage(2, message, messageLength);
70 }
virtual void sendMessage(uint8_t opCode, const char *message, std::size_t messageLength)=0

◆ sendMessage() [2/2]

template<typename SocketContextUpgrade >
void web::websocket::SubProtocol< SocketContextUpgrade >::sendMessage ( const std::string & message) const

Definition at line 73 of file SubProtocol.hpp.

73 {
74 subProtocolContext->sendMessage(1, message.data(), message.length());
75 }

◆ sendMessageEnd() [1/2]

template<typename SocketContextUpgrade >
void web::websocket::SubProtocol< SocketContextUpgrade >::sendMessageEnd ( const char * message,
std::size_t messageLength ) const

Definition at line 98 of file SubProtocol.hpp.

98 {
99 subProtocolContext->sendMessageEnd(message, messageLength);
100 }
virtual void sendMessageEnd(const char *message, std::size_t messageLength)=0

◆ sendMessageEnd() [2/2]

template<typename SocketContextUpgrade >
void web::websocket::SubProtocol< SocketContextUpgrade >::sendMessageEnd ( const std::string & message) const

Definition at line 103 of file SubProtocol.hpp.

103 {
104 sendMessageEnd(message.data(), message.length());
105 }
void sendMessageEnd(const char *message, std::size_t messageLength) const

◆ sendMessageFrame() [1/2]

template<typename SocketContextUpgrade >
void web::websocket::SubProtocol< SocketContextUpgrade >::sendMessageFrame ( const char * message,
std::size_t messageLength ) const

Definition at line 88 of file SubProtocol.hpp.

88 {
89 subProtocolContext->sendMessageFrame(message, messageLength);
90 }
virtual void sendMessageFrame(const char *message, std::size_t messageLength)=0

◆ sendMessageFrame() [2/2]

template<typename SocketContextUpgrade >
void web::websocket::SubProtocol< SocketContextUpgrade >::sendMessageFrame ( const std::string & message) const

Definition at line 93 of file SubProtocol.hpp.

93 {
94 sendMessageFrame(message.data(), message.length());
95 }
void sendMessageFrame(const char *message, std::size_t messageLength) const

◆ sendMessageStart() [1/2]

template<typename SocketContextUpgrade >
void web::websocket::SubProtocol< SocketContextUpgrade >::sendMessageStart ( const char * message,
std::size_t messageLength ) const

Definition at line 78 of file SubProtocol.hpp.

78 {
79 subProtocolContext->sendMessageStart(2, message, messageLength);
80 }
virtual void sendMessageStart(uint8_t opCode, const char *message, std::size_t messageLength)=0

◆ sendMessageStart() [2/2]

template<typename SocketContextUpgrade >
void web::websocket::SubProtocol< SocketContextUpgrade >::sendMessageStart ( const std::string & message) const

Definition at line 83 of file SubProtocol.hpp.

83 {
84 subProtocolContext->sendMessageStart(1, message.data(), message.length());
85 }

◆ sendPing()

template<typename SocketContextUpgrade >
void web::websocket::SubProtocol< SocketContextUpgrade >::sendPing ( const char * reason = nullptr,
std::size_t reasonLength = 0 ) const

Definition at line 108 of file SubProtocol.hpp.

108 {
109 LOG(DEBUG) << getSocketConnection()->getConnectionName() << " WebSocket: Ping sent";
110
111 subProtocolContext->sendPing(reason, reasonLength);
112 }
virtual void sendPing(const char *reason=nullptr, std::size_t reasonLength=0)=0

Friends And Related Symbol Documentation

◆ web::websocket::SocketContextUpgrade

template<typename SocketContextUpgradeT >
template<typename SubProtocolT , typename RequestT , typename ResponseT >
friend class web::websocket::SocketContextUpgrade
friend

Definition at line 103 of file SubProtocol.h.

Member Data Documentation

◆ flyingPings

template<typename SocketContextUpgradeT >
int web::websocket::SubProtocol< SocketContextUpgradeT >::flyingPings = 0
private

Definition at line 100 of file SubProtocol.h.

◆ name

template<typename SocketContextUpgradeT >
const std::string web::websocket::SubProtocol< SocketContextUpgradeT >::name
private

Definition at line 93 of file SubProtocol.h.

◆ pingTimer

template<typename SocketContextUpgradeT >
core::timer::Timer web::websocket::SubProtocol< SocketContextUpgradeT >::pingTimer
private

Definition at line 99 of file SubProtocol.h.

◆ subProtocolContext

template<typename SocketContextUpgradeT >
SubProtocolContext* web::websocket::SubProtocol< SocketContextUpgradeT >::subProtocolContext
protected

Definition at line 96 of file SubProtocol.h.


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