12#include <ascii-chat/network/websocket/client.h>
13#include <ascii-chat/common.h>
14#include <ascii-chat/log/logging.h>
15#include <ascii-chat/platform/abstraction.h>
16#include <ascii-chat/network/acip/transport.h>
25 websocket_client_t *client = SAFE_MALLOC(
sizeof(websocket_client_t), websocket_client_t *);
27 log_error(
"Failed to allocate websocket_client_t");
32 memset(client, 0,
sizeof(*client));
35 atomic_store(&client->connection_active,
false);
36 atomic_store(&client->connection_lost,
false);
37 client->transport = NULL;
39 log_debug(
"WebSocket client created");
48 if (!client_ptr || !*client_ptr) {
52 websocket_client_t *client = *client_ptr;
54 log_debug(
"Destroying WebSocket client");
57 if (client->transport) {
59 client->transport = NULL;
62 SAFE_FREE(*client_ptr);
72 return atomic_load(&client->connection_active);
82 return atomic_load(&client->connection_lost);
92 atomic_store(&client->connection_lost,
true);
93 atomic_store(&client->connection_active,
false);
94 log_debug(
"WebSocket connection marked as lost");
105 log_debug(
"Closing WebSocket client");
107 if (client->transport) {
108 acip_transport_close(client->transport);
111 atomic_store(&client->connection_active,
false);
122 log_debug(
"Shutting down WebSocket client");
125 if (client->transport) {
126 acip_transport_close(client->transport);
129 atomic_store(&client->connection_active,
false);
130 atomic_store(&client->connection_lost,
true);
142 struct crypto_context_t *crypto_ctx) {
143 if (!client || !url) {
144 log_error(
"Invalid arguments to websocket_client_connect");
148 log_info(
"Connecting WebSocket client to %s", url);
151 strncpy(client->url, url,
sizeof(client->url) - 1);
152 client->url[
sizeof(client->url) - 1] =
'\0';
157 log_error(
"Failed to create WebSocket transport");
158 atomic_store(&client->connection_lost,
true);
163 client->transport = transport;
164 atomic_store(&client->connection_active,
true);
165 atomic_store(&client->connection_lost,
false);
167 log_info(
"WebSocket client connected to %s", url);
179 return client->transport;
bool websocket_client_is_active(const websocket_client_t *client)
Check if connection is currently active.
void websocket_client_shutdown(websocket_client_t *client)
Shutdown connection forcefully.
acip_transport_t * websocket_client_connect(websocket_client_t *client, const char *url, struct crypto_context_t *crypto_ctx)
Establish WebSocket connection to server.
bool websocket_client_is_lost(const websocket_client_t *client)
Check if connection was lost.
websocket_client_t * websocket_client_create(void)
Create and initialize WebSocket client.
void websocket_client_close(websocket_client_t *client)
Close connection gracefully.
void websocket_client_destroy(websocket_client_t **client_ptr)
Destroy WebSocket client and free resources.
acip_transport_t * websocket_client_get_transport(const websocket_client_t *client)
Get active transport instance.
void websocket_client_signal_lost(websocket_client_t *client)
Signal that connection was lost.
void acip_transport_destroy(acip_transport_t *transport)
acip_transport_t * acip_websocket_client_transport_create(const char *url, crypto_context_t *crypto_ctx)
Create WebSocket client transport.