ascii-chat
Binary v0.15.83-53-gb711d8720
Library lib/v0.3.2-701-gb711d8720
Video chat in your terminal
Loading...
Searching...
No Matches
host.h
Go to the documentation of this file.
1
49
50#pragma once
51
53#include <stdbool.h>
54#include <stddef.h>
55#include <stdint.h>
58#include <libplatform/terminal.h>
61
62/* ============================================================================
63 * Session Host Types
64 * ============================================================================ */
65
74typedef struct session_host session_host_t;
75
102
108typedef struct {
115 void (*on_client_join)(session_host_t *h, uint32_t client_id, void *user_data);
116
123 void (*on_client_leave)(session_host_t *h, uint32_t client_id, void *user_data);
124
132 void (*on_frame_received)(session_host_t *h, uint32_t client_id, const image_t *frame, void *user_data);
133
142 void (*on_audio_received)(session_host_t *h, uint32_t client_id, const float *samples, size_t count, void *user_data);
143
151 void (*on_error)(session_host_t *h, asciichat_error_t error, const char *message, void *user_data);
153
159typedef struct {
161 int port;
162
164 const char *ipv4_address;
165
167 const char *ipv6_address;
168
171
174
177
179 const char *key_path;
180
182 const char *password;
183
186
189
196
197/* ============================================================================
198 * Session Host Lifecycle Functions
199 * @{
200 */
201
216
227
229
230/* ============================================================================
231 * Session Host Server Control Functions
232 * @{
233 */
234
246
256
265
267
268/* ============================================================================
269 * Session Host Client Management Functions
270 * @{
271 */
272
278 acip_transport_ownership_t ownership, const char *ip, int port);
279
295
312
330 size_t count);
331
345
358
367
377int session_host_get_client_ids(session_host_t *host, uint32_t *ids, int max_ids);
378
380
381/* ============================================================================
382 * Session Host Broadcast Functions
383 * @{
384 */
385
397
407asciichat_error_t session_host_send_frame(session_host_t *host, uint32_t client_id, const char *frame);
408
410
411/* ============================================================================
412 * Session Host Render Thread Functions
413 * @{
414 */
415
431
438typedef struct {
439 terminal_capabilities_t caps;
440 const char *palette;
441 int width;
444
450typedef struct {
453 void (*render_frame)(void *context, const char *frame, size_t size, int width, int height);
454 void *context;
456
462
478
488
490
491/* ============================================================================
492 * Session Host Transport Functions (WebRTC Integration)
493 * @{
494 */
495
507
525 acip_transport_t *transport, acip_transport_ownership_t ownership);
526
539
552
554
556
559 const void *data, size_t len);
562
Synchronized per-thread pending error stacks and value snapshots. SET_ERRNO pushes,...
Application limits and constraints.
unsigned int height
Definition fft.c:23
unsigned int width
Definition fft.c:23
unsigned int uint32_t
Definition common.h:62
unsigned long long uint64_t
Definition common.h:63
asciichat_error_t
Error and exit codes - unified status values (0-255).
Definition error_codes.h:44
#define IP_ADDRESS_BUFFER_SIZE
packet_type_t
Network protocol packet type enumeration.
Definition packet.h:301
void session_host_stop_render(session_host_t *host)
Stop media rendering thread.
Definition host.c:1669
asciichat_error_t session_host_inject_audio(session_host_t *host, uint32_t participant_id, const float *samples, size_t count)
Inject audio samples from memory participant.
Definition host.c:1342
asciichat_error_t session_host_destroy(session_host_t *host)
Destroy session host and free resources.
Definition host.c:289
bool session_host_client_has_transport(session_host_t *host, uint32_t client_id)
Check if a specific client has an active ACIP transport.
Definition host.c:1776
bool session_host_is_running(session_host_t *host)
Check if host is running.
Definition host.c:1118
asciichat_error_t session_host_stop(session_host_t *host)
Stop accepting connections and disconnect all clients.
Definition host.c:1076
asciichat_error_t session_host_set_client_transport(session_host_t *host, uint32_t client_id, acip_transport_t *transport, acip_transport_ownership_t ownership)
Select a transport for a specific client in the host.
Definition host.c:1703
struct session_host session_host_t
Opaque session host handle.
asciichat_error_t session_host_inject_frame(session_host_t *host, uint32_t participant_id, const image_t *frame)
Inject a video frame from memory participant.
Definition host.c:1290
uint32_t session_host_add_memory_participant(session_host_t *host)
Add a memory participant (host's own media).
Definition host.c:1213
asciichat_error_t session_host_set_display(session_host_t *host, struct session_display_ctx *display)
Set a native terminal display context for local frame rendering.
Definition host.c:1614
acip_transport_t * session_host_get_client_transport(session_host_t *host, uint32_t client_id)
Get the current transport for a specific client in the host.
Definition host.c:1756
asciichat_error_t session_host_send_frame(session_host_t *host, uint32_t client_id, const char *frame)
Send ASCII frame to a specific client.
Definition host.c:1518
struct acip_transport acip_transport_t
Forward declaration of ACIP transport.
Definition host.h:506
int session_host_get_client_count(session_host_t *host)
Get number of connected clients.
Definition host.c:1460
asciichat_error_t session_host_remove_client(session_host_t *host, uint32_t client_id)
Remove a client by ID.
Definition host.c:1385
asciichat_error_t session_host_find_client(session_host_t *host, uint32_t client_id, session_host_client_info_t *info)
Find a client by ID.
Definition host.c:1435
asciichat_error_t session_host_start(session_host_t *host)
Start accepting client connections.
Definition host.c:1037
int session_host_get_client_ids(session_host_t *host, uint32_t *ids, int max_ids)
Get list of all connected client IDs.
Definition host.c:1467
asciichat_error_t session_host_broadcast_frame(session_host_t *host, const char *frame)
Broadcast ASCII frame to all clients.
Definition host.c:1489
session_host_t * session_host_create(const session_host_config_t *config)
Create a new session host.
Definition host.c:234
asciichat_error_t session_host_start_render(session_host_t *host)
Start media rendering thread (video mixing and audio distribution).
Definition host.c:1632
asciichat_error_t session_host_accept_peer(session_host_t *, acip_transport_t *)
Definition host.c:1106
asciichat_error_t session_host_receive_packet(session_host_t *host, uint32_t client_id, packet_type_t type, const void *data, size_t len)
Definition host.c:343
asciichat_error_t session_host_render_audio(session_host_t *host)
Definition host.c:817
asciichat_error_t session_host_render_video(session_host_t *host)
Definition host.c:810
uint32_t session_host_add_client(session_host_t *host, acip_transport_t *transport, acip_transport_ownership_t ownership, const char *ip, int port)
Definition host.c:1129
asciichat_error_t session_host_set_render_target(session_host_t *host, const session_host_render_target_t *target)
Definition host.c:1550
Transport abstraction layer for ACIP protocol.
uint8_t participant_id[SESSION_ID_SIZE]
SIMD-friendly storage for one RGB pixel. r, g, and b hold the color channels and padding keeps the la...
Runtime terminal state and reusable workspaces for ASCII rendering.
Snapshot of the address, identity, activity, and connection time for one host client.
Definition host.h:108
void(* on_error)(session_host_t *h, asciichat_error_t error, const char *message, void *user_data)
Called when an error occurs.
Definition host.h:151
void(* on_client_leave)(session_host_t *h, uint32_t client_id, void *user_data)
Called when a client leaves the session.
Definition host.h:123
void(* on_client_join)(session_host_t *h, uint32_t client_id, void *user_data)
Called when a client joins the session.
Definition host.h:115
void(* on_audio_received)(session_host_t *h, uint32_t client_id, const float *samples, size_t count, void *user_data)
Called when audio samples received from a client.
Definition host.h:142
void(* on_frame_received)(session_host_t *h, uint32_t client_id, const image_t *frame, void *user_data)
Called when video frame received from a client.
Definition host.h:132
Snapshot of the address, identity, activity, and connection time for one host client.
Definition host.h:83
uint64_t connected_at
Connection timestamp (Unix time).
Definition host.h:100
int port
Client port.
Definition host.h:91
bool audio_active
Client is currently streaming audio.
Definition host.h:97
char ip_address[IP_ADDRESS_BUFFER_SIZE]
Client IP address.
Definition host.h:88
uint32_t client_id
Unique client identifier.
Definition host.h:85
bool video_active
Client is currently streaming video.
Definition host.h:94
Host-side event hooks for joins, departures, media, and errors.
Definition host.h:159
void * user_data
User-provided context pointer passed to callbacks.
Definition host.h:188
struct session_display_ctx * display_context
Display context for local frame rendering (optional, can be NULL).
Definition host.h:194
const char * ipv6_address
IPv6 address to bind to (NULL for any).
Definition host.h:167
session_host_callbacks_t callbacks
Event callbacks.
Definition host.h:185
bool encryption_enabled
Enable encryption (default: true).
Definition host.h:173
bool configured_quic_listeners
Definition host.h:176
const char * key_path
Path to server identity key.
Definition host.h:179
int port
Port to listen on (default: 27224).
Definition host.h:161
const char * password
Password for client authentication (optional).
Definition host.h:182
const char * ipv4_address
IPv4 address to bind to (NULL for any).
Definition host.h:164
int max_clients
Maximum number of clients.
Definition host.h:170
When code needs to work with session host render config, it keeps caps, palette, width,...
Definition host.h:438
terminal_capabilities_t caps
Definition host.h:439
session host render target is intentionally a small, concrete record. Fields such as client_id,...
Definition host.h:450
void(* render_frame)(void *context, const char *frame, size_t size, int width, int height)
Definition host.h:453
asciichat_error_t(* get_config)(void *context, session_host_render_config_t *config)
Definition host.h:452