Kurlyk
Loading...
Searching...
No Matches
kurlyk::EmscriptenWebSocketClientAdapter Class Reference

A WebSocket client implementation using the Emscripten API. More...

#include <EmscriptenWebSocketClientAdapter.hpp>

Public Member Functions

 EmscriptenWebSocketClientAdapter ()
 Constructor: Initializes the WebSocket client.
 
 ~EmscriptenWebSocketClientAdapter () override final
 Destructor: Cleans up resources and resets the WebSocket client state.
 
 EmscriptenWebSocketClientAdapter (const EmscriptenWebSocketClientAdapter &)=delete
 
void operator= (const EmscriptenWebSocketClientAdapter &)=delete
 
std::function< void(std::unique_ptr< WebSocketEventData >)> & event_handler () override final
 Accessor for the event handler function.
 
bool set_config (std::unique_ptr< WebSocketConfig > config) override final
 Sets the WebSocket configuration.
 
void connect () override final
 Initiate connection to the WebSocket server.
 
void disconnect () override final
 Disconnect from the WebSocket server.
 
const bool is_connected () override final
 Checks if the WebSocket is connected.
 
const bool is_running () override final
 Checks if the client is currently running.
 
bool send_message (const std::string &message, const RateLimitType &rate_limit_type=RateLimitType::General, std::function< void(const std::error_code &ec)> callback=nullptr) override final
 Send a message through the WebSocket.
 
bool send_close (const int status=1000, const std::string &reason=std::string(), std::function< void(const std::error_code &ec)> callback=nullptr) override final
 Send a close request through the WebSocket.
 
std::list< std::unique_ptr< WebSocketEventData > > receive_events () override final
 Retrieve all pending events.
 
std::unique_ptr< WebSocketEventDatareceive_event () override final
 Retrieve the next pending event.
 
void process () override final
 Process pending operations such as connecting, sending, and handling events.
 
void reset () override final
 Reset the WebSocket client state.
 

Private Types

enum class  WebSocketState {
  START , CONNECTING , WORKING , DISCONNECTING ,
  STOPPED
}
 State for the WebSocket connection. More...
 
enum class  FsmState {
  INIT , CONNECTING , WORKING , RECONNECTING ,
  STOPPED
}
 Finite state machine states controlling client workflow. More...
 
enum class  FsmEvent {
  RequestConnect , RequestDisconnect , ConnectionOpened , ConnectionClosed ,
  ConnectionError , UpdateConfig
}
 Represents events in the finite state machine. More...
 
using time_point_t = std::chrono::steady_clock::time_point
 
using event_data_ptr_t = std::unique_ptr<WebSocketEventData>
 
using send_info_ptr_t = std::shared_ptr<WebSocketSendInfo>
 

Private Member Functions

bool init_websocket ()
 
void reset_websocket ()
 
void process_message_queue ()
 Process the queue of messages waiting to be sent.
 
void process_handle_event ()
 Process the events queue.
 
void process_fsm_state ()
 
void process_fsm_start ()
 
void process_fsm_connecting ()
 
void on_open (const EmscriptenWebSocketOpenEvent *event_data)
 
void on_message (const EmscriptenWebSocketMessageEvent *event_data)
 
void on_error (const EmscriptenWebSocketErrorEvent *event_data)
 
void on_close (const EmscriptenWebSocketCloseEvent *event_data)
 
std::unique_ptr< WebSocketEventDatacreate_websocket_event ()
 
std::unique_ptr< WebSocketEventDatacreate_websocket_event (const EmscriptenWebSocketOpenEvent *event_data)
 
std::unique_ptr< WebSocketEventDatacreate_websocket_event (const EmscriptenWebSocketMessageEvent *event_data)
 
std::unique_ptr< WebSocketEventDatacreate_websocket_event (const EmscriptenWebSocketErrorEvent *event_data)
 
std::unique_ptr< WebSocketEventDatacreate_websocket_event (const EmscriptenWebSocketCloseEvent *event_data)
 

Static Private Member Functions

static EM_BOOL on_open_cb (int event_type, const EmscriptenWebSocketOpenEvent *event_data, void *user_data)
 
static EM_BOOL on_close_cb (int event_type, const EmscriptenWebSocketCloseEvent *event_data, void *user_data)
 
static EM_BOOL on_error_cb (int event_type, const EmscriptenWebSocketErrorEvent *event_data, void *user_data)
 
static EM_BOOL on_message_cb (int event_type, const EmscriptenWebSocketMessageEvent *event_data, void *user_data)
 

Private Attributes

enum kurlyk::EmscriptenWebSocketClientAdapter::WebSocketState m_ws_state = WebSocketState::START
 
enum kurlyk::EmscriptenWebSocketClientAdapter::FsmState m_fsm_state = FsmState::INIT
 
std::function< void(std::unique_ptr< WebSocketEventData >)> m_on_event
 
utils::EventQueue< FsmEventm_fsm_event_queue
 
std::unique_ptr< WebSocketConfigm_config
 
std::unique_ptr< WebSocketConfigm_pending_config
 
std::mutex m_config_mutex
 
bool m_is_config_updated = false
 
WebSocketRateLimiter m_rate_limiter
 
time_point_t m_start_time
 
EMSCRIPTEN_WEBSOCKET_T m_client_ws
 
std::mutex m_client_mutex
 
std::shared_ptr< WsClient::Connection > m_ws_connection
 
std::shared_ptr< WssClient::Connection > m_wss_connection
 
std::list< event_data_ptr_tm_event_queue
 
std::mutex m_message_queue_mutex
 
std::list< send_info_ptr_tm_message_queue
 
long m_reconnect_attempt = 0
 
std::atomic< bool > m_is_connection_active = ATOMIC_VAR_INIT(false)
 
std::atomic< bool > m_is_running = ATOMIC_VAR_INIT(false)
 

Detailed Description

A WebSocket client implementation using the Emscripten API.

Definition at line 38 of file EmscriptenWebSocketClientAdapter.hpp.

Member Typedef Documentation

◆ event_data_ptr_t

◆ send_info_ptr_t

◆ time_point_t

using kurlyk::EmscriptenWebSocketClientAdapter::time_point_t = std::chrono::steady_clock::time_point
private

Definition at line 184 of file EmscriptenWebSocketClientAdapter.hpp.

Member Enumeration Documentation

◆ FsmEvent

Represents events in the finite state machine.

Enumerator
RequestConnect 

Request to connect.

RequestDisconnect 

Request to disconnect.

ConnectionOpened 

Connection opened.

ConnectionClosed 

Connection closed.

ConnectionError 

Connection error occurred.

UpdateConfig 

Configuration update requested.

Definition at line 207 of file EmscriptenWebSocketClientAdapter.hpp.

◆ FsmState

Finite state machine states controlling client workflow.

Enumerator
INIT 

Initialization.

CONNECTING 

Waiting for connection.

WORKING 

Connection active.

RECONNECTING 

Attempting reconnection.

STOPPED 

Stopped.

Definition at line 198 of file EmscriptenWebSocketClientAdapter.hpp.

◆ WebSocketState

State for the WebSocket connection.

Enumerator
START 

Initialization.

CONNECTING 

Waiting for connection establishment.

WORKING 

Connection is active.

DISCONNECTING 

Waiting for disconnection.

STOPPED 

Connection stopped.

Definition at line 189 of file EmscriptenWebSocketClientAdapter.hpp.

Constructor & Destructor Documentation

◆ EmscriptenWebSocketClientAdapter() [1/2]

kurlyk::EmscriptenWebSocketClientAdapter::EmscriptenWebSocketClientAdapter ( )
inline

Constructor: Initializes the WebSocket client.

Definition at line 42 of file EmscriptenWebSocketClientAdapter.hpp.

◆ ~EmscriptenWebSocketClientAdapter()

kurlyk::EmscriptenWebSocketClientAdapter::~EmscriptenWebSocketClientAdapter ( )
inlinefinaloverride

Destructor: Cleans up resources and resets the WebSocket client state.

Definition at line 47 of file EmscriptenWebSocketClientAdapter.hpp.

◆ EmscriptenWebSocketClientAdapter() [2/2]

kurlyk::EmscriptenWebSocketClientAdapter::EmscriptenWebSocketClientAdapter ( const EmscriptenWebSocketClientAdapter & )
delete

Member Function Documentation

◆ connect()

void kurlyk::EmscriptenWebSocketClientAdapter::connect ( )
inlinefinaloverride

Initiate connection to the WebSocket server.

Definition at line 84 of file EmscriptenWebSocketClientAdapter.hpp.

◆ create_websocket_event() [1/5]

std::unique_ptr< WebSocketEventData > kurlyk::EmscriptenWebSocketClientAdapter::create_websocket_event ( )
inlineprivate

Definition at line 553 of file EmscriptenWebSocketClientAdapter.hpp.

◆ create_websocket_event() [2/5]

std::unique_ptr< WebSocketEventData > kurlyk::EmscriptenWebSocketClientAdapter::create_websocket_event ( const EmscriptenWebSocketCloseEvent * event_data)
inlineprivate

Definition at line 586 of file EmscriptenWebSocketClientAdapter.hpp.

◆ create_websocket_event() [3/5]

std::unique_ptr< WebSocketEventData > kurlyk::EmscriptenWebSocketClientAdapter::create_websocket_event ( const EmscriptenWebSocketErrorEvent * event_data)
inlineprivate

Definition at line 578 of file EmscriptenWebSocketClientAdapter.hpp.

◆ create_websocket_event() [4/5]

std::unique_ptr< WebSocketEventData > kurlyk::EmscriptenWebSocketClientAdapter::create_websocket_event ( const EmscriptenWebSocketMessageEvent * event_data)
inlineprivate

Definition at line 570 of file EmscriptenWebSocketClientAdapter.hpp.

◆ create_websocket_event() [5/5]

std::unique_ptr< WebSocketEventData > kurlyk::EmscriptenWebSocketClientAdapter::create_websocket_event ( const EmscriptenWebSocketOpenEvent * event_data)
inlineprivate

Definition at line 563 of file EmscriptenWebSocketClientAdapter.hpp.

◆ disconnect()

void kurlyk::EmscriptenWebSocketClientAdapter::disconnect ( )
inlinefinaloverride

Disconnect from the WebSocket server.

Definition at line 92 of file EmscriptenWebSocketClientAdapter.hpp.

◆ event_handler()

std::function< void(std::unique_ptr< WebSocketEventData >)> & kurlyk::EmscriptenWebSocketClientAdapter::event_handler ( )
inlinefinaloverride

Accessor for the event handler function.

This method provides access to the event handler function used for handling WebSocket events. The returned reference allows getting or setting the function that will be called when a WebSocket event occurs.

Returns
A reference to a std::function<void(std::unique_ptr<WebSocketEventData>)> representing the event handler function.

Definition at line 60 of file EmscriptenWebSocketClientAdapter.hpp.

◆ init_websocket()

bool kurlyk::EmscriptenWebSocketClientAdapter::init_websocket ( )
inlineprivate

Definition at line 240 of file EmscriptenWebSocketClientAdapter.hpp.

◆ is_connected()

const bool kurlyk::EmscriptenWebSocketClientAdapter::is_connected ( )
inlinefinaloverride

Checks if the WebSocket is connected.

Returns
True if the WebSocket is connected.

Definition at line 100 of file EmscriptenWebSocketClientAdapter.hpp.

◆ is_running()

const bool kurlyk::EmscriptenWebSocketClientAdapter::is_running ( )
inlinefinaloverride

Checks if the client is currently running.

Returns
True if the client is running.

Definition at line 107 of file EmscriptenWebSocketClientAdapter.hpp.

◆ on_close()

void kurlyk::EmscriptenWebSocketClientAdapter::on_close ( const EmscriptenWebSocketCloseEvent * event_data)
inlineprivate

Definition at line 543 of file EmscriptenWebSocketClientAdapter.hpp.

◆ on_close_cb()

static EM_BOOL kurlyk::EmscriptenWebSocketClientAdapter::on_close_cb ( int event_type,
const EmscriptenWebSocketCloseEvent * event_data,
void * user_data )
inlinestaticprivate

Definition at line 493 of file EmscriptenWebSocketClientAdapter.hpp.

◆ on_error()

void kurlyk::EmscriptenWebSocketClientAdapter::on_error ( const EmscriptenWebSocketErrorEvent * event_data)
inlineprivate

Definition at line 534 of file EmscriptenWebSocketClientAdapter.hpp.

◆ on_error_cb()

static EM_BOOL kurlyk::EmscriptenWebSocketClientAdapter::on_error_cb ( int event_type,
const EmscriptenWebSocketErrorEvent * event_data,
void * user_data )
inlinestaticprivate

Definition at line 502 of file EmscriptenWebSocketClientAdapter.hpp.

◆ on_message()

void kurlyk::EmscriptenWebSocketClientAdapter::on_message ( const EmscriptenWebSocketMessageEvent * event_data)
inlineprivate

Definition at line 529 of file EmscriptenWebSocketClientAdapter.hpp.

◆ on_message_cb()

static EM_BOOL kurlyk::EmscriptenWebSocketClientAdapter::on_message_cb ( int event_type,
const EmscriptenWebSocketMessageEvent * event_data,
void * user_data )
inlinestaticprivate

Definition at line 511 of file EmscriptenWebSocketClientAdapter.hpp.

◆ on_open()

void kurlyk::EmscriptenWebSocketClientAdapter::on_open ( const EmscriptenWebSocketOpenEvent * event_data)
inlineprivate

Definition at line 522 of file EmscriptenWebSocketClientAdapter.hpp.

◆ on_open_cb()

static EM_BOOL kurlyk::EmscriptenWebSocketClientAdapter::on_open_cb ( int event_type,
const EmscriptenWebSocketOpenEvent * event_data,
void * user_data )
inlinestaticprivate

Definition at line 484 of file EmscriptenWebSocketClientAdapter.hpp.

◆ operator=()

void kurlyk::EmscriptenWebSocketClientAdapter::operator= ( const EmscriptenWebSocketClientAdapter & )
delete

◆ process()

void kurlyk::EmscriptenWebSocketClientAdapter::process ( )
inlinefinaloverride

Process pending operations such as connecting, sending, and handling events.

Definition at line 170 of file EmscriptenWebSocketClientAdapter.hpp.

◆ process_fsm_connecting()

void kurlyk::EmscriptenWebSocketClientAdapter::process_fsm_connecting ( )
inlineprivate

Definition at line 441 of file EmscriptenWebSocketClientAdapter.hpp.

◆ process_fsm_start()

void kurlyk::EmscriptenWebSocketClientAdapter::process_fsm_start ( )
inlineprivate

Definition at line 426 of file EmscriptenWebSocketClientAdapter.hpp.

◆ process_fsm_state()

void kurlyk::EmscriptenWebSocketClientAdapter::process_fsm_state ( )
inlineprivate

Definition at line 398 of file EmscriptenWebSocketClientAdapter.hpp.

◆ process_handle_event()

void kurlyk::EmscriptenWebSocketClientAdapter::process_handle_event ( )
inlineprivate

Process the events queue.

Definition at line 384 of file EmscriptenWebSocketClientAdapter.hpp.

◆ process_message_queue()

void kurlyk::EmscriptenWebSocketClientAdapter::process_message_queue ( )
inlineprivate

Process the queue of messages waiting to be sent.

Definition at line 321 of file EmscriptenWebSocketClientAdapter.hpp.

◆ receive_event()

std::unique_ptr< WebSocketEventData > kurlyk::EmscriptenWebSocketClientAdapter::receive_event ( )
inlinefinaloverride

Retrieve the next pending event.

Returns
A unique pointer to the next WebSocket event, or nullptr if no events are available.

Definition at line 161 of file EmscriptenWebSocketClientAdapter.hpp.

◆ receive_events()

std::list< std::unique_ptr< WebSocketEventData > > kurlyk::EmscriptenWebSocketClientAdapter::receive_events ( )
inlinefinaloverride

Retrieve all pending events.

Returns
A list of unique pointers to WebSocket events.

Definition at line 152 of file EmscriptenWebSocketClientAdapter.hpp.

◆ reset()

void kurlyk::EmscriptenWebSocketClientAdapter::reset ( )
inlinefinaloverride

Reset the WebSocket client state.

Definition at line 178 of file EmscriptenWebSocketClientAdapter.hpp.

◆ reset_websocket()

void kurlyk::EmscriptenWebSocketClientAdapter::reset_websocket ( )
inlineprivate

Definition at line 300 of file EmscriptenWebSocketClientAdapter.hpp.

◆ send_close()

bool kurlyk::EmscriptenWebSocketClientAdapter::send_close ( const int status = 1000,
const std::string & reason = std::string(),
std::function< void(const std::error_code &ec)> callback = nullptr )
inlinefinaloverride

Send a close request through the WebSocket.

Parameters
statusThe status code to send with the close request.
reasonThe reason for closing the connection.
callbackThe callback to be invoked after sending.
Returns
True if the close request was successfully queued, false otherwise.

Definition at line 136 of file EmscriptenWebSocketClientAdapter.hpp.

◆ send_message()

bool kurlyk::EmscriptenWebSocketClientAdapter::send_message ( const std::string & message,
const RateLimitType & rate_limit_type = RateLimitType::General,
std::function< void(const std::error_code &ec)> callback = nullptr )
inlinefinaloverride

Send a message through the WebSocket.

Parameters
messageThe message to send.
rate_limit_typeThe rate limit type to apply.
callbackThe callback to be invoked after sending.
Returns
True if the message was successfully queued, false otherwise.

Definition at line 116 of file EmscriptenWebSocketClientAdapter.hpp.

◆ set_config()

bool kurlyk::EmscriptenWebSocketClientAdapter::set_config ( std::unique_ptr< WebSocketConfig > config)
inlinefinaloverride

Sets the WebSocket configuration.

Parameters
configThe configuration object to set.
Returns
True if the configuration was successfully updated.

Definition at line 67 of file EmscriptenWebSocketClientAdapter.hpp.

Member Data Documentation

◆ m_client_mutex

std::mutex kurlyk::EmscriptenWebSocketClientAdapter::m_client_mutex
private

Definition at line 227 of file EmscriptenWebSocketClientAdapter.hpp.

◆ m_client_ws

EMSCRIPTEN_WEBSOCKET_T kurlyk::EmscriptenWebSocketClientAdapter::m_client_ws
private

Definition at line 226 of file EmscriptenWebSocketClientAdapter.hpp.

◆ m_config

std::unique_ptr<WebSocketConfig> kurlyk::EmscriptenWebSocketClientAdapter::m_config
private

Definition at line 218 of file EmscriptenWebSocketClientAdapter.hpp.

◆ m_config_mutex

std::mutex kurlyk::EmscriptenWebSocketClientAdapter::m_config_mutex
private

Definition at line 220 of file EmscriptenWebSocketClientAdapter.hpp.

◆ m_event_queue

std::list<event_data_ptr_t> kurlyk::EmscriptenWebSocketClientAdapter::m_event_queue
private

Definition at line 231 of file EmscriptenWebSocketClientAdapter.hpp.

◆ m_fsm_event_queue

utils::EventQueue<FsmEvent> kurlyk::EmscriptenWebSocketClientAdapter::m_fsm_event_queue
private

Definition at line 217 of file EmscriptenWebSocketClientAdapter.hpp.

◆ m_fsm_state

enum kurlyk::EmscriptenWebSocketClientAdapter::FsmState kurlyk::EmscriptenWebSocketClientAdapter::m_fsm_state = FsmState::INIT
private

◆ m_is_config_updated

bool kurlyk::EmscriptenWebSocketClientAdapter::m_is_config_updated = false
private

Definition at line 221 of file EmscriptenWebSocketClientAdapter.hpp.

◆ m_is_connection_active

std::atomic<bool> kurlyk::EmscriptenWebSocketClientAdapter::m_is_connection_active = ATOMIC_VAR_INIT(false)
private

Definition at line 237 of file EmscriptenWebSocketClientAdapter.hpp.

◆ m_is_running

std::atomic<bool> kurlyk::EmscriptenWebSocketClientAdapter::m_is_running = ATOMIC_VAR_INIT(false)
private

Definition at line 238 of file EmscriptenWebSocketClientAdapter.hpp.

◆ m_message_queue

std::list<send_info_ptr_t> kurlyk::EmscriptenWebSocketClientAdapter::m_message_queue
private

Definition at line 234 of file EmscriptenWebSocketClientAdapter.hpp.

◆ m_message_queue_mutex

std::mutex kurlyk::EmscriptenWebSocketClientAdapter::m_message_queue_mutex
private

Definition at line 233 of file EmscriptenWebSocketClientAdapter.hpp.

◆ m_on_event

std::function<void(std::unique_ptr<WebSocketEventData>)> kurlyk::EmscriptenWebSocketClientAdapter::m_on_event
private

Definition at line 216 of file EmscriptenWebSocketClientAdapter.hpp.

◆ m_pending_config

std::unique_ptr<WebSocketConfig> kurlyk::EmscriptenWebSocketClientAdapter::m_pending_config
private

Definition at line 219 of file EmscriptenWebSocketClientAdapter.hpp.

◆ m_rate_limiter

WebSocketRateLimiter kurlyk::EmscriptenWebSocketClientAdapter::m_rate_limiter
private

Definition at line 224 of file EmscriptenWebSocketClientAdapter.hpp.

◆ m_reconnect_attempt

long kurlyk::EmscriptenWebSocketClientAdapter::m_reconnect_attempt = 0
private

Definition at line 236 of file EmscriptenWebSocketClientAdapter.hpp.

◆ m_start_time

time_point_t kurlyk::EmscriptenWebSocketClientAdapter::m_start_time
private

Definition at line 225 of file EmscriptenWebSocketClientAdapter.hpp.

◆ m_ws_connection

std::shared_ptr<WsClient::Connection> kurlyk::EmscriptenWebSocketClientAdapter::m_ws_connection
private

Definition at line 229 of file EmscriptenWebSocketClientAdapter.hpp.

◆ m_ws_state

enum kurlyk::EmscriptenWebSocketClientAdapter::WebSocketState kurlyk::EmscriptenWebSocketClientAdapter::m_ws_state = WebSocketState::START
private

◆ m_wss_connection

std::shared_ptr<WssClient::Connection> kurlyk::EmscriptenWebSocketClientAdapter::m_wss_connection
private

Definition at line 230 of file EmscriptenWebSocketClientAdapter.hpp.


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