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#ifndef WEB_WEBSOCKET_SOCKETCONTEXT_H
43#define WEB_WEBSOCKET_SOCKETCONTEXT_H
45#include "web/http/SocketContextUpgrade.h"
46#include "web/websocket/SubProtocolContext.h"
48namespace core::socket {
49 class SocketConnection;
53 template <
typename RequestT,
typename ResponseT>
58 template <
typename SubProtocolT>
59 class SubProtocolFactory;
62#ifndef DOXYGEN_SHOULD_SKIP_THIS
64#include "log/Logger.h"
73#define CLOSE_SOCKET_TIMEOUT 10
77 template <
typename SubProtocolT,
typename RequestT,
typename ResponseT>
79 :
public web::http::SocketContextUpgrade<RequestT, ResponseT>
87 using Super = web::http::SocketContextUpgrade<RequestT, ResponseT>;
90 using SubProtocol = SubProtocolT;
91 using Request = RequestT;
92 using Response = ResponseT;
95 using Super::readFromPeer;
96 using Super::sendToPeer;
97 using Super::setTimeout;
98 using Super::shutdownWrite;
111 void sendMessage(uint8_t opCode,
const char* message, std::size_t messageLength)
override;
112 void sendMessageStart(uint8_t opCode,
const char* message, std::size_t messageLength)
override;
113 void sendMessageFrame(
const char* message, std::size_t messageLength)
override;
114 void sendMessageEnd(
const char* message, std::size_t messageLength)
override;
115 void sendPing(
const char* reason =
nullptr, std::size_t reasonLength = 0)
override;
116 void sendPong(
const char* reason =
nullptr, std::size_t reasonLength = 0)
override;
117 void sendClose(uint16_t statusCode = 1000,
const char* reason =
nullptr, std::size_t reasonLength = 0)
override;
118 void sendClose(
const char* message, std::size_t messageLength)
override;
124 void onMessageData(
const char* chunk, uint64_t chunkLen)
override;
void sendClose(uint16_t statusCode=1000, const char *reason=nullptr, std::size_t reasonLength=0) override
bool onSignal(int sig) override
void onDisconnected() override
void sendPing(const char *reason=nullptr, std::size_t reasonLength=0) override
~SocketContextUpgrade() override=default
void onMessageData(const char *chunk, uint64_t chunkLen) override
SocketContextUpgrade(const SocketContextUpgrade &)=delete
std::string pongCloseData
SocketContextUpgrade & operator=(const SocketContextUpgrade &)=delete
void sendMessage(uint8_t opCode, const char *message, std::size_t messageLength) override
SubProtocol * subProtocol
void onMessageEnd() override
void sendClose(const char *message, std::size_t messageLength) override
void sendMessageFrame(const char *message, std::size_t messageLength) override
void sendMessageEnd(const char *message, std::size_t messageLength) override
SocketContextUpgrade()=delete
std::size_t onReceivedFromPeer() override
SocketContextUpgrade(core::socket::stream::SocketConnection *socketConnection, web::http::SocketContextUpgradeFactory< Request, Response > *socketContextUpgradeFactory, Role role)
void sendPong(const char *reason=nullptr, std::size_t reasonLength=0) override
void sendMessageStart(uint8_t opCode, const char *message, std::size_t messageLength) override
void onMessageStart(int opCode) override
void onConnected() override
core::socket::stream::SocketConnection * getSocketConnection() override
void onMessageError(uint16_t errnum) override
SubProtocolFactory * select(const std::string &subProtocolName, Role role)
virtual std::size_t deleteSubProtocol(SubProtocol *subProtocol)
SubProtocol * createSubProtocol(SubProtocolContext *subProtocolContext)
~SocketContextUpgrade() override
web::websocket::SubProtocolFactory< SubProtocol > * subProtocolFactory
std::string loadSubProtocol(const std::string &subProtocolName)
SocketContextUpgrade(core::socket::stream::SocketConnection *socketConnection, web::http::SocketContextUpgradeFactory< web::http::client::Request, web::http::client::Response > *socketContextUpgradeFactory)
static SubProtocolFactorySelector * instance()
friend class web::websocket::SocketContextUpgrade