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_SUBPROTOCOLSELECTOR_H
43#define WEB_WEBSOCKET_SUBPROTOCOLSELECTOR_H
45#ifndef DOXYGEN_SHOULD_SKIP_THIS
47#include "core/DynamicLoader.h"
56 template <
typename SubProtocolFactoryT>
62 using SubProtocolFactory = SubProtocolFactoryT;
70 virtual SubProtocolFactory*
load(
const std::string& subProtocolName) = 0;
71 static SubProtocolFactory*
load(
const std::string& subProtocolName,
72 const std::string& subProtocolLibraryFile,
73 const std::string& subProtocolFactoryFunctionName);
76 SubProtocolFactory*
select(
const std::string& subProtocolName);
77 SubProtocolFactory*
select(
const std::string& subProtocolName,
Role role);
79 template <
typename SubProtocolFactory>
80 void unload(SubProtocolFactory* subProtocolFactory) {
81 std::string name = subProtocolFactory->getName();
86 void* handle = subProtocolFactory->getHandle();
87 delete subProtocolFactory;
89 if (handle !=
nullptr) {
98 template <
typename SubProtocolFactory>
99 void link(
const std::string& subProtocolName, SubProtocolFactory* (*subProtocolFactory)()) {
static void dlCloseDelayed(void *handle)
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
void unload(SubProtocolFactory *subProtocolFactory)
SubProtocolFactory * select(const std::string &subProtocolName)
void link(const std::string &subProtocolName, SubProtocolFactory *(*subProtocolFactory)())
SubProtocolFactorySelector(const SubProtocolFactorySelector &)=delete
std::map< std::string, SubProtocolFactory * > subProtocolFactories
SubProtocolFactorySelector()=default
SubProtocolFactorySelector & operator=(const SubProtocolFactorySelector &)=delete
virtual ~SubProtocolFactorySelector()=default
virtual SubProtocolFactory * load(const std::string &subProtocolName)=0
static SubProtocolFactory * load(const std::string &subProtocolName, const std::string &subProtocolLibraryFile, const std::string &subProtocolFactoryFunctionName)
std::map< std::string, SubProtocolFactory *(*)()> linkedSubProtocolFactories
SubProtocolFactory * select(const std::string &subProtocolName, Role role)
virtual std::size_t deleteSubProtocol(SubProtocol *subProtocol)
SubProtocol * createSubProtocol(SubProtocolContext *subProtocolContext)
void sendMessageEnd(const char *message, std::size_t messageLength)
void sendMessage(uint8_t opCode, const char *message, std::size_t messageLength)
void sendMessageStart(uint8_t opCode, const char *message, std::size_t messageLength)
void sendMessageFrame(const char *message, std::size_t messageLength)
~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 void allowDlOpen()
SubProtocolFactory * load(const std::string &subProtocolName) override
SubProtocolFactorySelector(const SubProtocolFactorySelector &)=delete
SubProtocolFactorySelector()=default
SubProtocolFactorySelector & operator=(const SubProtocolFactorySelector &)=delete
static void link(const std::string &subProtocolName, SubProtocolFactory *(*getSubProtocolFactory)())
static SubProtocolFactorySelector * instance()
~SubProtocolFactorySelector() override
friend class web::websocket::SocketContextUpgrade
#define CLOSE_SOCKET_TIMEOUT