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 "web/websocket/SubProtocolFactorySelector.h"
44#ifndef DOXYGEN_SHOULD_SKIP_THIS
46#include "log/Logger.h"
55 template <
typename SubProtocolFactory>
57 const std::string& subProtocolLibraryFile,
58 const std::string& subProtocolFactoryFunctionName) {
63 if (handle !=
nullptr) {
66 if (getSubProtocolFactory !=
nullptr) {
67 subProtocolFactory = getSubProtocolFactory();
68 if (subProtocolFactory !=
nullptr) {
69 subProtocolFactory->setHandle(handle);
70 LOG(DEBUG) <<
"WebSocket: SubProtocolFactory create success: " << subProtocolName;
72 LOG(DEBUG) <<
"WebSocket: SubProtocolFactory create failed: " << subProtocolName;
76 LOG(DEBUG) <<
"WebSocket: Optaining function \"" << subProtocolFactoryFunctionName
82 return subProtocolFactory;
85 template <
typename SubProtocolFactory>
93 LOG(DEBUG) <<
"WebSocket subprotocol: plugin '" << subProtocolName <<
"' selected from dynamic cache";
96 subProtocolFactory = plugin();
98 LOG(DEBUG) <<
"WebSocket subprotocol: plugin '" << subProtocolName <<
"' selected from static cache";
100 subProtocolFactory = load(subProtocolName);
103 LOG(DEBUG) <<
"WebSocket subprotocol: plugin '" << subProtocolName <<
"' loaded and added to dynamic cache";
105 LOG(WARNING) <<
"WebSocket subprotocol: plugin '" << subProtocolName <<
"' not found";
108 return subProtocolFactory;
111 template <
typename SubProtocolFactory>
static int dlClose(void *handle)
static const char * dlError()
static void * dlSym(void *handle, const std::string &symbol)
static void * dlOpen(const std::string &libFile, int flags=RTLD_LOCAL|RTLD_LAZY)
LogMessage(Level level, int verboseLevel=-1, bool withErrno=false)
static const std::string & getApplicationName()
std::map< std::string, SubProtocolFactory * > subProtocolFactories
SubProtocolFactoryT SubProtocolFactory
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)
static void allowDlOpen()
SubProtocolFactory * load(const std::string &subProtocolName) override
web::websocket::SubProtocolFactorySelector< web::websocket::SubProtocolFactory< web::websocket::client::SubProtocol > > Super
static SubProtocolFactorySelector * instance()
~SubProtocolFactorySelector() override