Babel
Epitech's C++ VoIP project
Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
Babel::AsioTCPServer< T > Class Template Reference

Implementation of ITCPServer using ASIO. More...

#include <AsioTCPServer.hpp>

Inheritance diagram for Babel::AsioTCPServer< T >:
Collaboration diagram for Babel::AsioTCPServer< T >:

Public Member Functions

bool start (uint16_t port) override
 Starts the server on indicated port. More...
 
void stop () override
 Stop the server. More...
 
void messageClient (std::shared_ptr< ITCPConnection< T >> client, const Message< T > &msg) override
 Send a message to the specified client. More...
 
void messageAllClients (const Message< T > &msg) override
 Send a message to all connected clients. More...
 
void update (uint64_t nbMessagesToProcess, bool wait) override
 Forces the server to call callbacks. More...
 
bool onClientConnect (std::shared_ptr< ITCPConnection< T >> client) override
 Called when a client connect. More...
 
void onClientDisconnect (std::shared_ptr< ITCPConnection< T >> client) override
 Called when a client disconnect. More...
 
void onMessage (std::shared_ptr< ITCPConnection< T >> client, Message< T > &msg) override
 Called when we received a message from a client. More...
 
 ~AsioTCPServer () override
 default dtor More...
 
 AsioTCPServer ()
 ctor More...
 
- Public Member Functions inherited from Babel::ITCPServer< T >
virtual ~ITCPServer ()=default
 default dtor More...
 

Protected Member Functions

void waitForClientConnections ()
 Listens for client messages. More...
 

Protected Attributes

TSQueue< OwnedMessage< T > > _messagesIn
 Received messages from clients. More...
 
std::deque< std::shared_ptr< ITCPConnection< T > > > _connections
 All the active connections. More...
 
asio::io_context _ioContext
 Server's asio context. More...
 
std::thread _contextThread
 Thread running the asio context. More...
 
asio::ip::tcp::acceptor _acceptor
 The acceptor. More...
 
uint64_t _idCounter = 0
 The counter to set connections ids. More...
 

Detailed Description

template<typename T>
class Babel::AsioTCPServer< T >

Implementation of ITCPServer using ASIO.

Constructor & Destructor Documentation

◆ ~AsioTCPServer()

template<typename T >
Babel::AsioTCPServer< T >::~AsioTCPServer
override

default dtor

◆ AsioTCPServer()

template<typename T >
Babel::AsioTCPServer< T >::AsioTCPServer
explicit

ctor

Member Function Documentation

◆ messageAllClients()

template<typename T >
void Babel::AsioTCPServer< T >::messageAllClients ( const Message< T > &  msg)
overridevirtual

Send a message to all connected clients.

Implements Babel::ITCPServer< T >.

◆ messageClient()

template<typename T >
void Babel::AsioTCPServer< T >::messageClient ( std::shared_ptr< ITCPConnection< T >>  client,
const Message< T > &  msg 
)
overridevirtual

Send a message to the specified client.

Implements Babel::ITCPServer< T >.

◆ onClientConnect()

template<typename T >
bool Babel::AsioTCPServer< T >::onClientConnect ( std::shared_ptr< ITCPConnection< T >>  client)
overridevirtual

Called when a client connect.

Note
You can refuse the connection by returning false

Implements Babel::ITCPServer< T >.

◆ onClientDisconnect()

template<typename T >
void Babel::AsioTCPServer< T >::onClientDisconnect ( std::shared_ptr< ITCPConnection< T >>  client)
overridevirtual

Called when a client disconnect.

Implements Babel::ITCPServer< T >.

◆ onMessage()

template<typename T >
void Babel::AsioTCPServer< T >::onMessage ( std::shared_ptr< ITCPConnection< T >>  client,
Message< T > &  msg 
)
overridevirtual

Called when we received a message from a client.

Implements Babel::ITCPServer< T >.

◆ start()

template<typename T >
bool Babel::AsioTCPServer< T >::start ( uint16_t  port)
overridevirtual

Starts the server on indicated port.

Implements Babel::ITCPServer< T >.

◆ stop()

template<typename T >
void Babel::AsioTCPServer< T >::stop
overridevirtual

Stop the server.

Implements Babel::ITCPServer< T >.

◆ update()

template<typename T >
void Babel::AsioTCPServer< T >::update ( uint64_t  nbMessagesToProcess,
bool  wait 
)
overridevirtual

Forces the server to call callbacks.

Implements Babel::ITCPServer< T >.

◆ waitForClientConnections()

template<typename T >
void Babel::AsioTCPServer< T >::waitForClientConnections
protected

Listens for client messages.

Member Data Documentation

◆ _acceptor

template<typename T >
asio::ip::tcp::acceptor Babel::AsioTCPServer< T >::_acceptor
protected

The acceptor.

◆ _connections

template<typename T >
std::deque<std::shared_ptr<ITCPConnection<T> > > Babel::AsioTCPServer< T >::_connections
protected

All the active connections.

Note
cleaning is done lazily with send messages functions, so check if the client is still connected

◆ _contextThread

template<typename T >
std::thread Babel::AsioTCPServer< T >::_contextThread
protected

Thread running the asio context.

◆ _idCounter

template<typename T >
uint64_t Babel::AsioTCPServer< T >::_idCounter = 0
protected

The counter to set connections ids.

◆ _ioContext

template<typename T >
asio::io_context Babel::AsioTCPServer< T >::_ioContext
protected

Server's asio context.

◆ _messagesIn

template<typename T >
TSQueue<OwnedMessage<T> > Babel::AsioTCPServer< T >::_messagesIn
protected

Received messages from clients.


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