ascii-chat 0.8.38
Real-time terminal-based video chat with ASCII art conversion
Loading...
Searching...
No Matches
client.h
Go to the documentation of this file.
1
10#pragma once
11
12#include <ascii-chat/network/client.h>
13
14// Forward declaration to avoid circular dependency with main.h
15// Files that need the full definition should include main.h themselves
17
63typedef struct {
65 client_info_t clients[MAX_CLIENTS];
67 client_info_t *clients_by_id;
71 mutex_t mutex;
73 _Atomic uint32_t next_client_id;
75
76// Global client manager
78extern rwlock_t g_client_manager_rwlock;
79
80// Client management functions
81int add_client(server_context_t *server_ctx, socket_t socket, const char *client_ip, int port);
82int add_webrtc_client(server_context_t *server_ctx, acip_transport_t *transport, const char *client_ip,
83 bool start_threads);
84int start_webrtc_client_threads(server_context_t *server_ctx, uint32_t client_id);
85int remove_client(server_context_t *server_ctx, uint32_t client_id);
86client_info_t *find_client_by_id(uint32_t client_id);
87client_info_t *find_client_by_socket(socket_t socket);
88void cleanup_client_media_buffers(client_info_t *client);
89void cleanup_client_packet_queues(client_info_t *client);
90
91// Client thread functions
92void *client_receive_thread(void *arg);
93void stop_client_threads(client_info_t *client);
94
95// Packet processing functions
96int process_encrypted_packet(client_info_t *client, packet_type_t *type, void **data, size_t *len, uint32_t *sender_id);
97void process_decrypted_packet(client_info_t *client, packet_type_t type, void *data, size_t len);
98
99// Client initialization
100void initialize_client_info(client_info_t *client);
void initialize_client_info(client_info_t *client)
int start_webrtc_client_threads(server_context_t *server_ctx, uint32_t client_id)
Start threads for a WebRTC client after crypto initialization.
client_info_t * find_client_by_id(uint32_t client_id)
Fast O(1) client lookup by ID using hash table.
int add_client(server_context_t *server_ctx, socket_t socket, const char *client_ip, int port)
void cleanup_client_media_buffers(client_info_t *client)
void process_decrypted_packet(client_info_t *client, packet_type_t type, void *data, size_t len)
void cleanup_client_packet_queues(client_info_t *client)
rwlock_t g_client_manager_rwlock
Reader-writer lock protecting the global client manager.
void * client_receive_thread(void *arg)
int remove_client(server_context_t *server_ctx, uint32_t client_id)
void stop_client_threads(client_info_t *client)
int add_webrtc_client(server_context_t *server_ctx, acip_transport_t *transport, const char *client_ip, bool start_threads)
Register a WebRTC client with the server.
client_info_t * find_client_by_socket(socket_t socket)
Find client by socket descriptor using linear search.
int process_encrypted_packet(client_info_t *client, packet_type_t *type, void **data, size_t *len, uint32_t *sender_id)
client_manager_t g_client_manager
Global client manager singleton - central coordination point.
int socket_t
Global client manager structure for server-side client coordination.
Definition client.h:63
_Atomic uint32_t next_client_id
Monotonic counter for unique client IDs (atomic for thread-safety)
Definition client.h:73
client_info_t * clients_by_id
uthash head pointer for O(1) client_id -> client_info_t* lookups
Definition client.h:67
mutex_t mutex
Legacy mutex (mostly replaced by rwlock)
Definition client.h:71
int client_count
Current number of active clients.
Definition client.h:69
Server context - encapsulates all server state.