SNode.C
Loading...
Searching...
No Matches
web::websocket::SubProtocolFactorySelector< SubProtocolFactoryT > Class Template Referenceabstract

#include <SubProtocolFactorySelector.h>

Collaboration diagram for web::websocket::SubProtocolFactorySelector< SubProtocolFactoryT >:

Public Types

enum class  Role { SERVER , CLIENT }
using SubProtocolFactory = SubProtocolFactoryT

Public Member Functions

 SubProtocolFactorySelector (const SubProtocolFactorySelector &)=delete
SubProtocolFactorySelectoroperator= (const SubProtocolFactorySelector &)=delete
SubProtocolFactoryselect (const std::string &subProtocolName)
SubProtocolFactoryselect (const std::string &subProtocolName, Role role)
template<typename SubProtocolFactory>
void unload (SubProtocolFactory *subProtocolFactory)

Protected Member Functions

 SubProtocolFactorySelector ()=default
virtual ~SubProtocolFactorySelector ()=default
virtual SubProtocolFactoryload (const std::string &subProtocolName)=0
void allowDlOpen ()
template<typename SubProtocolFactory>
void link (const std::string &subProtocolName, SubProtocolFactory *(*subProtocolFactory)())

Static Protected Member Functions

static SubProtocolFactoryload (const std::string &subProtocolName, const std::string &subProtocolLibraryFile, const std::string &subProtocolFactoryFunctionName)

Private Attributes

std::map< std::string, SubProtocolFactory * > subProtocolFactories
std::map< std::string, SubProtocolFactory *(*)()> linkedSubProtocolFactories
bool onlyLinked = false

Detailed Description

template<typename SubProtocolFactoryT>
class web::websocket::SubProtocolFactorySelector< SubProtocolFactoryT >

Definition at line 57 of file SubProtocolFactorySelector.h.

Member Typedef Documentation

◆ SubProtocolFactory

template<typename SubProtocolFactoryT>
using web::websocket::SubProtocolFactorySelector< SubProtocolFactoryT >::SubProtocolFactory = SubProtocolFactoryT

Definition at line 62 of file SubProtocolFactorySelector.h.

Member Enumeration Documentation

◆ Role

template<typename SubProtocolFactoryT>
enum class web::websocket::SubProtocolFactorySelector::Role
strong
Enumerator
SERVER 
CLIENT 

Definition at line 64 of file SubProtocolFactorySelector.h.

64{ SERVER, CLIENT };

Constructor & Destructor Documentation

◆ SubProtocolFactorySelector() [1/2]

template<typename SubProtocolFactoryT>
web::websocket::SubProtocolFactorySelector< SubProtocolFactoryT >::SubProtocolFactorySelector ( const SubProtocolFactorySelector< SubProtocolFactoryT > & )
delete

◆ SubProtocolFactorySelector() [2/2]

template<typename SubProtocolFactoryT>
web::websocket::SubProtocolFactorySelector< SubProtocolFactoryT >::SubProtocolFactorySelector ( )
protecteddefault

◆ ~SubProtocolFactorySelector()

template<typename SubProtocolFactoryT>
virtual web::websocket::SubProtocolFactorySelector< SubProtocolFactoryT >::~SubProtocolFactorySelector ( )
protectedvirtualdefault

Member Function Documentation

◆ allowDlOpen()

template<typename SubProtocolFactory>
void web::websocket::SubProtocolFactorySelector< SubProtocolFactory >::allowDlOpen ( )
protected

Definition at line 118 of file SubProtocolFactorySelector.hpp.

References onlyLinked.

Referenced by web::websocket::client::SubProtocolFactorySelector::allowDlOpen(), and web::websocket::server::SubProtocolFactorySelector::allowDlOpen().

Here is the caller graph for this function:

◆ link()

template<typename SubProtocolFactoryT>
template<typename SubProtocolFactory>
void web::websocket::SubProtocolFactorySelector< SubProtocolFactoryT >::link ( const std::string & subProtocolName,
SubProtocolFactory *(* subProtocolFactory )() )
inlineprotected

◆ load() [1/2]

template<typename SubProtocolFactoryT>
virtual SubProtocolFactory * web::websocket::SubProtocolFactorySelector< SubProtocolFactoryT >::load ( const std::string & subProtocolName)
protectedpure virtual

◆ load() [2/2]

template<typename SubProtocolFactory>
SubProtocolFactory * web::websocket::SubProtocolFactorySelector< SubProtocolFactory >::load ( const std::string & subProtocolName,
const std::string & subProtocolLibraryFile,
const std::string & subProtocolFactoryFunctionName )
staticprotected

Definition at line 56 of file SubProtocolFactorySelector.hpp.

58 {
60
62
63 if (handle != nullptr) {
64 SubProtocolFactory* (*getSubProtocolFactory)() =
66 if (getSubProtocolFactory != nullptr) {
68 if (subProtocolFactory != nullptr) {
69 subProtocolFactory->setHandle(handle);
70 LOG(DEBUG) << "WebSocket: SubProtocolFactory create: success: " << subProtocolName;
71 } else {
72 LOG(DEBUG) << "WebSocket: SubProtocolFactory create: failed: " << subProtocolName;
74 }
75 } else {
76 LOG(DEBUG) << "WebSocket: Optaining function \"" << subProtocolFactoryFunctionName
77 << "\" in plugin failed: " << core::DynamicLoader::dlError();
79 }
80 }
81
82 return subProtocolFactory;
83 }
static char * dlError()
static int dlClose(void *handle)

References core::DynamicLoader::dlClose(), core::DynamicLoader::dlError(), core::DynamicLoader::dlRegisterHandle(), and core::DynamicLoader::dlSym().

Referenced by web::websocket::client::SubProtocolFactorySelector::load(), and web::websocket::server::SubProtocolFactorySelector::load().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ operator=()

template<typename SubProtocolFactoryT>
SubProtocolFactorySelector & web::websocket::SubProtocolFactorySelector< SubProtocolFactoryT >::operator= ( const SubProtocolFactorySelector< SubProtocolFactoryT > & )
delete

◆ select() [1/2]

template<typename SubProtocolFactory>
SubProtocolFactory * web::websocket::SubProtocolFactorySelector< SubProtocolFactory >::select ( const std::string & subProtocolName)

Definition at line 86 of file SubProtocolFactorySelector.hpp.

86 {
88
91 }
92
93 return subProtocolFactory;
94 }
std::map< std::string, SubProtocolFactory * > subProtocolFactories

References subProtocolFactories.

◆ select() [2/2]

template<typename SubProtocolFactory>
SubProtocolFactory * web::websocket::SubProtocolFactorySelector< SubProtocolFactory >::select ( const std::string & subProtocolName,
Role role )

Definition at line 97 of file SubProtocolFactorySelector.hpp.

98 {
100
101 if (subProtocolFactory == nullptr) {
105 } else if (!onlyLinked) {
107 }
108
109 if (subProtocolFactory != nullptr) {
111 }
112 }
113
114 return subProtocolFactory;
115 }
SubProtocolFactory * select(const std::string &subProtocolName)
virtual SubProtocolFactory * load(const std::string &subProtocolName)=0

References linkedSubProtocolFactories, onlyLinked, and subProtocolFactories.

Referenced by web::websocket::client::SocketContextUpgrade::loadSubProtocol(), and web::websocket::server::SocketContextUpgrade::loadSubProtocol().

Here is the caller graph for this function:

◆ unload()

template<typename SubProtocolFactoryT>
template<typename SubProtocolFactory>
void web::websocket::SubProtocolFactorySelector< SubProtocolFactoryT >::unload ( SubProtocolFactory * subProtocolFactory)
inline

Definition at line 80 of file SubProtocolFactorySelector.h.

80 {
82
83 if (subProtocolFactories.contains(name)) {
85
86 void* handle = subProtocolFactory->getHandle();
87 delete subProtocolFactory;
88
89 if (handle != nullptr) {
91 }
92 }
93 }
static void dlCloseDelayed(void *handle)

Member Data Documentation

◆ linkedSubProtocolFactories

template<typename SubProtocolFactoryT>
std::map<std::string, SubProtocolFactory* (*) ()> web::websocket::SubProtocolFactorySelector< SubProtocolFactoryT >::linkedSubProtocolFactories
private

◆ onlyLinked

template<typename SubProtocolFactoryT>
bool web::websocket::SubProtocolFactorySelector< SubProtocolFactoryT >::onlyLinked = false
private

◆ subProtocolFactories

template<typename SubProtocolFactoryT>
std::map<std::string, SubProtocolFactory*> web::websocket::SubProtocolFactorySelector< SubProtocolFactoryT >::subProtocolFactories
private

The documentation for this class was generated from the following files: