![]() |
Kurlyk
|
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< WebSocketEventData > | receive_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< WebSocketEventData > | create_websocket_event () |
std::unique_ptr< WebSocketEventData > | create_websocket_event (const EmscriptenWebSocketOpenEvent *event_data) |
std::unique_ptr< WebSocketEventData > | create_websocket_event (const EmscriptenWebSocketMessageEvent *event_data) |
std::unique_ptr< WebSocketEventData > | create_websocket_event (const EmscriptenWebSocketErrorEvent *event_data) |
std::unique_ptr< WebSocketEventData > | create_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< FsmEvent > | m_fsm_event_queue |
std::unique_ptr< WebSocketConfig > | m_config |
std::unique_ptr< WebSocketConfig > | m_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_t > | m_event_queue |
std::mutex | m_message_queue_mutex |
std::list< send_info_ptr_t > | m_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) |
A WebSocket client implementation using the Emscripten API.
Definition at line 38 of file EmscriptenWebSocketClientAdapter.hpp.
|
private |
Definition at line 185 of file EmscriptenWebSocketClientAdapter.hpp.
|
private |
Definition at line 186 of file EmscriptenWebSocketClientAdapter.hpp.
|
private |
Definition at line 184 of file EmscriptenWebSocketClientAdapter.hpp.
|
strongprivate |
Represents events in the finite state machine.
Definition at line 207 of file EmscriptenWebSocketClientAdapter.hpp.
|
strongprivate |
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.
|
strongprivate |
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.
|
inline |
Constructor: Initializes the WebSocket client.
Definition at line 42 of file EmscriptenWebSocketClientAdapter.hpp.
|
inlinefinaloverride |
Destructor: Cleans up resources and resets the WebSocket client state.
Definition at line 47 of file EmscriptenWebSocketClientAdapter.hpp.
|
delete |
|
inlinefinaloverride |
Initiate connection to the WebSocket server.
Definition at line 84 of file EmscriptenWebSocketClientAdapter.hpp.
|
inlineprivate |
Definition at line 553 of file EmscriptenWebSocketClientAdapter.hpp.
|
inlineprivate |
Definition at line 586 of file EmscriptenWebSocketClientAdapter.hpp.
|
inlineprivate |
Definition at line 578 of file EmscriptenWebSocketClientAdapter.hpp.
|
inlineprivate |
Definition at line 570 of file EmscriptenWebSocketClientAdapter.hpp.
|
inlineprivate |
Definition at line 563 of file EmscriptenWebSocketClientAdapter.hpp.
|
inlinefinaloverride |
Disconnect from the WebSocket server.
Definition at line 92 of file EmscriptenWebSocketClientAdapter.hpp.
|
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.
std::function<void(std::unique_ptr<WebSocketEventData>)>
representing the event handler function. Definition at line 60 of file EmscriptenWebSocketClientAdapter.hpp.
|
inlineprivate |
Definition at line 240 of file EmscriptenWebSocketClientAdapter.hpp.
|
inlinefinaloverride |
Checks if the WebSocket is connected.
Definition at line 100 of file EmscriptenWebSocketClientAdapter.hpp.
|
inlinefinaloverride |
Checks if the client is currently running.
Definition at line 107 of file EmscriptenWebSocketClientAdapter.hpp.
|
inlineprivate |
Definition at line 543 of file EmscriptenWebSocketClientAdapter.hpp.
|
inlinestaticprivate |
Definition at line 493 of file EmscriptenWebSocketClientAdapter.hpp.
|
inlineprivate |
Definition at line 534 of file EmscriptenWebSocketClientAdapter.hpp.
|
inlinestaticprivate |
Definition at line 502 of file EmscriptenWebSocketClientAdapter.hpp.
|
inlineprivate |
Definition at line 529 of file EmscriptenWebSocketClientAdapter.hpp.
|
inlinestaticprivate |
Definition at line 511 of file EmscriptenWebSocketClientAdapter.hpp.
|
inlineprivate |
Definition at line 522 of file EmscriptenWebSocketClientAdapter.hpp.
|
inlinestaticprivate |
Definition at line 484 of file EmscriptenWebSocketClientAdapter.hpp.
|
delete |
|
inlinefinaloverride |
Process pending operations such as connecting, sending, and handling events.
Definition at line 170 of file EmscriptenWebSocketClientAdapter.hpp.
|
inlineprivate |
Definition at line 441 of file EmscriptenWebSocketClientAdapter.hpp.
|
inlineprivate |
Definition at line 426 of file EmscriptenWebSocketClientAdapter.hpp.
|
inlineprivate |
Definition at line 398 of file EmscriptenWebSocketClientAdapter.hpp.
|
inlineprivate |
Process the events queue.
Definition at line 384 of file EmscriptenWebSocketClientAdapter.hpp.
|
inlineprivate |
Process the queue of messages waiting to be sent.
Definition at line 321 of file EmscriptenWebSocketClientAdapter.hpp.
|
inlinefinaloverride |
Retrieve the next pending event.
Definition at line 161 of file EmscriptenWebSocketClientAdapter.hpp.
|
inlinefinaloverride |
Retrieve all pending events.
Definition at line 152 of file EmscriptenWebSocketClientAdapter.hpp.
|
inlinefinaloverride |
Reset the WebSocket client state.
Definition at line 178 of file EmscriptenWebSocketClientAdapter.hpp.
|
inlineprivate |
Definition at line 300 of file EmscriptenWebSocketClientAdapter.hpp.
|
inlinefinaloverride |
Send a close request through the WebSocket.
status | The status code to send with the close request. |
reason | The reason for closing the connection. |
callback | The callback to be invoked after sending. |
Definition at line 136 of file EmscriptenWebSocketClientAdapter.hpp.
|
inlinefinaloverride |
Send a message through the WebSocket.
message | The message to send. |
rate_limit_type | The rate limit type to apply. |
callback | The callback to be invoked after sending. |
Definition at line 116 of file EmscriptenWebSocketClientAdapter.hpp.
|
inlinefinaloverride |
Sets the WebSocket configuration.
config | The configuration object to set. |
Definition at line 67 of file EmscriptenWebSocketClientAdapter.hpp.
|
private |
Definition at line 227 of file EmscriptenWebSocketClientAdapter.hpp.
|
private |
Definition at line 226 of file EmscriptenWebSocketClientAdapter.hpp.
|
private |
Definition at line 218 of file EmscriptenWebSocketClientAdapter.hpp.
|
private |
Definition at line 220 of file EmscriptenWebSocketClientAdapter.hpp.
|
private |
Definition at line 231 of file EmscriptenWebSocketClientAdapter.hpp.
|
private |
Definition at line 217 of file EmscriptenWebSocketClientAdapter.hpp.
|
private |
|
private |
Definition at line 221 of file EmscriptenWebSocketClientAdapter.hpp.
|
private |
Definition at line 237 of file EmscriptenWebSocketClientAdapter.hpp.
|
private |
Definition at line 238 of file EmscriptenWebSocketClientAdapter.hpp.
|
private |
Definition at line 234 of file EmscriptenWebSocketClientAdapter.hpp.
|
private |
Definition at line 233 of file EmscriptenWebSocketClientAdapter.hpp.
|
private |
Definition at line 216 of file EmscriptenWebSocketClientAdapter.hpp.
|
private |
Definition at line 219 of file EmscriptenWebSocketClientAdapter.hpp.
|
private |
Definition at line 224 of file EmscriptenWebSocketClientAdapter.hpp.
|
private |
Definition at line 236 of file EmscriptenWebSocketClientAdapter.hpp.
|
private |
Definition at line 225 of file EmscriptenWebSocketClientAdapter.hpp.
|
private |
Definition at line 229 of file EmscriptenWebSocketClientAdapter.hpp.
|
private |
|
private |
Definition at line 230 of file EmscriptenWebSocketClientAdapter.hpp.