37 SubProtocol<SocketContextUpgrade>::SubProtocol(SubProtocolContext* subProtocolContext,
38 const std::string& name,
42 , subProtocolContext(subProtocolContext) {
43 if (pingInterval > 0) {
44 pingTimer = core::timer::Timer::intervalTimer(
45 [
this, maxFlyingPings](
const std::function<
void()>& stop) {
46 if (flyingPings < maxFlyingPings) {
50 LOG(WARNING) << getSocketConnection()->getConnectionName() <<
" WebSocket: MaxFlyingPings exceeded - closing";
59 getSocketConnection()->setTimeout(0);
62 template <
typename SocketContextUpgrade>
63 SubProtocol<SocketContextUpgrade>::~SubProtocol() {
67 template <
typename SocketContextUpgrade>
68 void SubProtocol<SocketContextUpgrade>::sendMessage(
const char* message, std::size_t messageLength)
const {
69 subProtocolContext->sendMessage(2, message, messageLength);
72 template <
typename SocketContextUpgrade>
73 void SubProtocol<SocketContextUpgrade>::sendMessage(
const std::string& message)
const {
74 subProtocolContext->sendMessage(1, message.data(), message.length());
77 template <
typename SocketContextUpgrade>
78 void SubProtocol<SocketContextUpgrade>::sendMessageStart(
const char* message, std::size_t messageLength)
const {
79 subProtocolContext->sendMessageStart(2, message, messageLength);
82 template <
typename SocketContextUpgrade>
83 void SubProtocol<SocketContextUpgrade>::sendMessageStart(
const std::string& message)
const {
84 subProtocolContext->sendMessageStart(1, message.data(), message.length());
87 template <
typename SocketContextUpgrade>
88 void SubProtocol<SocketContextUpgrade>::sendMessageFrame(
const char* message, std::size_t messageLength)
const {
89 subProtocolContext->sendMessageFrame(message, messageLength);
92 template <
typename SocketContextUpgrade>
93 void SubProtocol<SocketContextUpgrade>::sendMessageFrame(
const std::string& message)
const {
94 sendMessageFrame(message.data(), message.length());
97 template <
typename SocketContextUpgrade>
98 void SubProtocol<SocketContextUpgrade>::sendMessageEnd(
const char* message, std::size_t messageLength)
const {
99 subProtocolContext->sendMessageEnd(message, messageLength);
102 template <
typename SocketContextUpgrade>
103 void SubProtocol<SocketContextUpgrade>::sendMessageEnd(
const std::string& message)
const {
104 sendMessageEnd(message.data(), message.length());
107 template <
typename SocketContextUpgrade>
108 void SubProtocol<SocketContextUpgrade>::sendPing(
const char* reason, std::size_t reasonLength)
const {
109 LOG(DEBUG) << getSocketConnection()->getConnectionName() <<
" WebSocket: Ping sent";
111 subProtocolContext->sendPing(reason, reasonLength);
114 template <
typename SocketContextUpgrade>
115 void SubProtocol<SocketContextUpgrade>::sendClose(uint16_t statusCode,
const char* reason, std::size_t reasonLength) {
116 subProtocolContext->sendClose(statusCode, reason, reasonLength);
119 template <
typename SocketContextUpgrade>
120 void SubProtocol<SocketContextUpgrade>::onPongReceived() {
121 LOG(DEBUG) << subProtocolContext->getSocketConnection()->getConnectionName() <<
" WebSocket: Pong received";
126 template <
typename SocketContextUpgrade>
127 const std::string& SubProtocol<SocketContextUpgrade>::getName() {
131 template <
typename SocketContextUpgrade>
132 core::socket::stream::SocketConnection* SubProtocol<SocketContextUpgrade>::getSocketConnection()
const {
133 return subProtocolContext->getSocketConnection();