Chatterino
Public Member Functions | Public Attributes | Protected Types | Protected Member Functions | List of all members
chatterino::BasicPubSubManager< Subscription > Class Template Referenceabstract

#include <BasicPubSubManager.hpp>

Public Member Functions

 BasicPubSubManager (QString host)
 
virtual ~BasicPubSubManager ()=default
 
 BasicPubSubManager (const BasicPubSubManager &)=delete
 
 BasicPubSubManager (const BasicPubSubManager &&)=delete
 
BasicPubSubManageroperator= (const BasicPubSubManager &)=delete
 
BasicPubSubManageroperator= (const BasicPubSubManager &&)=delete
 
void start ()
 
void stop ()
 

Public Attributes

struct {
   std::atomic< uint32_t >   connectionsClosed {0}
 
   std::atomic< uint32_t >   connectionsOpened {0}
 
   std::atomic< uint32_t >   connectionsFailed {0}
 
diag
 

Protected Types

using WebsocketMessagePtr = websocketpp::config::asio_tls_client::message_type::ptr
 
using WebsocketContextPtr = websocketpp::lib::shared_ptr< boost::asio::ssl::context >
 

Protected Member Functions

virtual void onMessage (websocketpp::connection_hdl hdl, WebsocketMessagePtr msg)=0
 
virtual std::shared_ptr< BasicPubSubClient< Subscription > > createClient (liveupdates::WebsocketClient &client, websocketpp::connection_hdl hdl)
 
std::shared_ptr< BasicPubSubClient< Subscription > > findClient (websocketpp::connection_hdl hdl)
 
void unsubscribe (const Subscription &subscription)
 
void subscribe (const Subscription &subscription)
 

Detailed Description

template<typename Subscription>
class chatterino::BasicPubSubManager< Subscription >

This class is the basis for connecting and interacting with simple PubSub servers over the Websocket protocol. It acts as a pool for connections (see BasicPubSubClient).

You can customize the clients, by creating your custom client in ::createClient.

You must implement onMessage. The method gets called for every received message on every connection. If you want to get the connection this message was received on, use findClient.

You must expose your own subscribe and unsubscribe methods (e.g. [un-]subscribeTopic). This manager does not keep track of the subscriptions.

Template Parameters
SubscriptionThe subscription has the following requirements: It must have the methods QByteArray encodeSubscribe(), and QByteArray encodeUnsubscribe(). It must have an overload for QDebug &operator<< (see tests/src/BasicPubSub.cpp), a specialization for std::hash, and and overload for operator== and operator!=.
See also
BasicPubSubClient

Member Typedef Documentation

◆ WebsocketContextPtr

template<typename Subscription>
using chatterino::BasicPubSubManager< Subscription >::WebsocketContextPtr = websocketpp::lib::shared_ptr<boost::asio::ssl::context>
protected

◆ WebsocketMessagePtr

template<typename Subscription>
using chatterino::BasicPubSubManager< Subscription >::WebsocketMessagePtr = websocketpp::config::asio_tls_client::message_type::ptr
protected

Constructor & Destructor Documentation

◆ BasicPubSubManager() [1/3]

template<typename Subscription>
chatterino::BasicPubSubManager< Subscription >::BasicPubSubManager ( QString  host)
inline
Here is the caller graph for this function:

◆ ~BasicPubSubManager()

template<typename Subscription>
virtual chatterino::BasicPubSubManager< Subscription >::~BasicPubSubManager ( )
virtualdefault
Here is the caller graph for this function:

◆ BasicPubSubManager() [2/3]

template<typename Subscription>
chatterino::BasicPubSubManager< Subscription >::BasicPubSubManager ( const BasicPubSubManager< Subscription > &  )
delete

◆ BasicPubSubManager() [3/3]

template<typename Subscription>
chatterino::BasicPubSubManager< Subscription >::BasicPubSubManager ( const BasicPubSubManager< Subscription > &&  )
delete

Member Function Documentation

◆ createClient()

template<typename Subscription>
virtual std::shared_ptr<BasicPubSubClient<Subscription> > chatterino::BasicPubSubManager< Subscription >::createClient ( liveupdates::WebsocketClient client,
websocketpp::connection_hdl  hdl 
)
inlineprotectedvirtual

Reimplemented in chatterino::SeventvEventAPI.

Here is the caller graph for this function:

◆ findClient()

template<typename Subscription>
std::shared_ptr<BasicPubSubClient<Subscription> > chatterino::BasicPubSubManager< Subscription >::findClient ( websocketpp::connection_hdl  hdl)
inlineprotected
Parameters
hdlThe handle of the client.
Returns
The client managing this connection, empty shared_ptr otherwise.

◆ onMessage()

template<typename Subscription>
virtual void chatterino::BasicPubSubManager< Subscription >::onMessage ( websocketpp::connection_hdl  hdl,
WebsocketMessagePtr  msg 
)
protectedpure virtual
Here is the caller graph for this function:

◆ operator=() [1/2]

template<typename Subscription>
BasicPubSubManager& chatterino::BasicPubSubManager< Subscription >::operator= ( const BasicPubSubManager< Subscription > &  )
delete
Here is the caller graph for this function:

◆ operator=() [2/2]

template<typename Subscription>
BasicPubSubManager& chatterino::BasicPubSubManager< Subscription >::operator= ( const BasicPubSubManager< Subscription > &&  )
delete

◆ start()

template<typename Subscription>
void chatterino::BasicPubSubManager< Subscription >::start ( )
inline

◆ stop()

template<typename Subscription>
void chatterino::BasicPubSubManager< Subscription >::stop ( )
inline

◆ subscribe()

template<typename Subscription>
void chatterino::BasicPubSubManager< Subscription >::subscribe ( const Subscription subscription)
inlineprotected
Here is the caller graph for this function:

◆ unsubscribe()

template<typename Subscription>
void chatterino::BasicPubSubManager< Subscription >::unsubscribe ( const Subscription subscription)
inlineprotected

Member Data Documentation

◆ connectionsClosed

template<typename Subscription>
std::atomic<uint32_t> chatterino::BasicPubSubManager< Subscription >::connectionsClosed {0}

◆ connectionsFailed

template<typename Subscription>
std::atomic<uint32_t> chatterino::BasicPubSubManager< Subscription >::connectionsFailed {0}

◆ connectionsOpened

template<typename Subscription>
std::atomic<uint32_t> chatterino::BasicPubSubManager< Subscription >::connectionsOpened {0}

◆ diag

This is only used for testing.


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