2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
42#include "core/socket/stream/SocketConnection.h"
43#include "web/websocket/SubProtocol.h"
44#include "web/websocket/SubProtocolContext.h"
46#ifndef DOXYGEN_SHOULD_SKIP_THIS
48#include "log/Logger.h"
58 template <
typename SocketContextUpgrade>
60 const std::string& name,
65 if (pingInterval > 0) {
67 [
this, maxFlyingPings](
const std::function<
void()>& stop) {
72 LOG(WARNING) <<
getSocketConnection()->getConnectionName() <<
" WebSocket: MaxFlyingPings exceeded - closing";
84 template <
typename SocketContextUpgrade>
89 template <
typename SocketContextUpgrade>
94 template <
typename SocketContextUpgrade>
99 template <
typename SocketContextUpgrade>
104 template <
typename SocketContextUpgrade>
109 template <
typename SocketContextUpgrade>
114 template <
typename SocketContextUpgrade>
116 sendMessageFrame(message.data(), message.length());
119 template <
typename SocketContextUpgrade>
124 template <
typename SocketContextUpgrade>
126 sendMessageEnd(message.data(), message.length());
129 template <
typename SocketContextUpgrade>
136 template <
typename SocketContextUpgrade>
137 void SubProtocol<SocketContextUpgrade>::
sendClose(uint16_t statusCode,
const char* reason, std::size_t reasonLength) {
141 template <
typename SocketContextUpgrade>
148 template <
typename SocketContextUpgrade>
153 template <
typename SocketContextUpgrade>
const std::string & getConnectionName() const
virtual void sendMessage(uint8_t opCode, const char *message, std::size_t messageLength)=0
virtual void sendPing(const char *reason=nullptr, std::size_t reasonLength=0)=0
virtual void sendMessageFrame(const char *message, std::size_t messageLength)=0
virtual void sendMessageEnd(const char *message, std::size_t messageLength)=0
virtual void sendClose(uint16_t statusCode=1000, const char *reason=nullptr, std::size_t reasonLength=0)=0
virtual void sendMessageStart(uint8_t opCode, const char *message, std::size_t messageLength)=0
virtual core::socket::stream::SocketConnection * getSocketConnection()=0
void sendMessage(const char *message, std::size_t messageLength) const
void sendMessageStart(const std::string &message) const
void sendMessageEnd(const char *message, std::size_t messageLength) const
core::socket::stream::SocketConnection * getSocketConnection() const
SubProtocol(SubProtocolContext *subProtocolContext, const std::string &name, int pingInterval=60, int maxFlyingPings=3)
void sendPing(const char *reason=nullptr, std::size_t reasonLength=0) const
void sendMessage(const std::string &message) const
SubProtocolContext * subProtocolContext
void sendMessageFrame(const std::string &message) const
const std::string & getName()
void sendMessageStart(const char *message, std::size_t messageLength) const
void sendClose(uint16_t statusCode=1000, const char *reason=nullptr, std::size_t reasonLength=0)
void sendMessageFrame(const char *message, std::size_t messageLength) const
virtual void onPongReceived()
void sendMessageEnd(const std::string &message) const
core::timer::Timer pingTimer