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 return subProtocolFactory;
96 template <
typename SubProtocolFactory>
101 if (subProtocolFactory ==
nullptr) {
104 subProtocolFactory = plugin();
106 subProtocolFactory = load(subProtocolName);
109 if (subProtocolFactory !=
nullptr) {
114 return subProtocolFactory;
117 template <
typename SubProtocolFactory>
static int dlClose(void *handle)
static const char * dlError()
static void * dlOpen(const std::string &libFile, int flags=RTLD_LOCAL|RTLD_LAZY)
static const void * dlSym(void *handle, const std::string &symbol)
static std::string getApplicationName()
SubProtocolFactory * select(const std::string &subProtocolName)
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