ascii-chat 0.11.33
Video chat in your terminal
Loading...
Searching...
No Matches
consensus.h
Go to the documentation of this file.
1
24#pragma once
25
28#include <stdint.h>
29#include <stdbool.h>
30
31#ifdef __cplusplus
32extern "C" {
33#endif
34
39
52typedef asciichat_error_t (*session_consensus_send_packet_fn)(void *context, const uint8_t next_participant_id[16],
53 const uint8_t *packet, size_t packet_size);
54
74 const char host_address[64], uint16_t host_port,
75 const uint8_t backup_id[16],
76 const char backup_address[64], uint16_t backup_port);
77
95 participant_metrics_t *out_metrics);
96
110typedef asciichat_error_t (*session_consensus_election_fn)(void *context, const participant_metrics_t *metrics,
111 int num_metrics, int *out_best_index, int *out_backup_index);
112
126
142asciichat_error_t session_consensus_create(const uint8_t my_id[16], bool is_leader,
143 const uint8_t participant_ids[64][16], int num_participants,
144 const session_consensus_callbacks_t *callbacks,
145 session_consensus_t **out_consensus);
146
153
173
185asciichat_error_t session_consensus_set_topology(session_consensus_t *consensus, const uint8_t participant_ids[64][16],
186 int num_participants);
187
200 uint64_t deadline_ns);
201
215 const participant_metrics_t *metrics, uint8_t num_metrics);
216
233 const char host_address[64], uint16_t host_port,
234 const uint8_t backup_id[16], const char backup_address[64],
235 uint16_t backup_port);
236
253 char out_host_address[64], uint16_t *out_host_port,
254 uint8_t out_backup_id[16], char out_backup_address[64],
255 uint16_t *out_backup_port);
256
267
275
285
295
296#ifdef __cplusplus
297}
298#endif
⚠️‼️ Comprehensive thread-local error context system for ascii-chat
asciichat_error_t session_consensus_process(session_consensus_t *consensus, uint32_t timeout_ms)
Main consensus processing loop - call periodically.
Definition consensus.c:182
asciichat_error_t session_consensus_set_topology(session_consensus_t *consensus, const uint8_t participant_ids[64][16], int num_participants)
Update ring topology when participants change.
Definition consensus.c:191
asciichat_error_t session_consensus_on_election_result(session_consensus_t *consensus, const uint8_t host_id[16], const char host_address[64], uint16_t host_port, const uint8_t backup_id[16], const char backup_address[64], uint16_t backup_port)
Handle incoming ELECTION_RESULT packet from leader.
Definition consensus.c:236
void session_consensus_destroy(session_consensus_t *consensus)
Destroy consensus instance and free all resources.
Definition consensus.c:166
int session_consensus_get_metrics_count(session_consensus_t *consensus)
Get count of metrics collected in current round.
Definition consensus.c:314
asciichat_error_t(* session_consensus_get_metrics_fn)(void *context, const uint8_t my_id[16], participant_metrics_t *out_metrics)
Callback: Measure current participant's network metrics.
Definition consensus.h:94
asciichat_error_t(* session_consensus_election_fn)(void *context, const participant_metrics_t *metrics, int num_metrics, int *out_best_index, int *out_backup_index)
Callback type for custom election algorithm.
Definition consensus.h:110
asciichat_error_t session_consensus_on_collection_start(session_consensus_t *consensus, uint32_t round_id, uint64_t deadline_ns)
Handle incoming STATS_COLLECTION_START packet.
Definition consensus.c:218
bool session_consensus_is_ready(session_consensus_t *consensus)
Check if consensus has completed at least one round.
Definition consensus.c:285
asciichat_error_t session_consensus_create(const uint8_t my_id[16], bool is_leader, const uint8_t participant_ids[64][16], int num_participants, const session_consensus_callbacks_t *callbacks, session_consensus_t **out_consensus)
Create a new session consensus instance.
Definition consensus.c:108
asciichat_error_t session_consensus_on_stats_update(session_consensus_t *consensus, const uint8_t sender_id[16], const participant_metrics_t *metrics, uint8_t num_metrics)
Handle incoming STATS_UPDATE packet (metrics relayed around ring)
Definition consensus.c:227
asciichat_error_t(* session_consensus_send_packet_fn)(void *context, const uint8_t next_participant_id[16], const uint8_t *packet, size_t packet_size)
Callback: Send a consensus packet to the next ring participant.
Definition consensus.h:52
asciichat_error_t(* session_consensus_on_election_fn)(void *context, const uint8_t host_id[16], const char host_address[64], uint16_t host_port, const uint8_t backup_id[16], const char backup_address[64], uint16_t backup_port)
Callback: Handle elected host result.
Definition consensus.h:73
int session_consensus_get_state(session_consensus_t *consensus)
Get current consensus state.
Definition consensus.c:298
uint64_t session_consensus_time_until_next_round(session_consensus_t *consensus)
Get time until next consensus round in nanoseconds.
Definition consensus.c:306
asciichat_error_t session_consensus_get_elected_host(session_consensus_t *consensus, uint8_t out_host_id[16], char out_host_address[64], uint16_t *out_host_port, uint8_t out_backup_id[16], char out_backup_address[64], uint16_t *out_backup_port)
Get the currently elected host.
Definition consensus.c:259
unsigned short uint16_t
Definition common.h:57
unsigned int uint32_t
Definition common.h:58
unsigned long long uint64_t
Definition common.h:59
unsigned char uint8_t
Definition common.h:56
asciichat_error_t
Error and exit codes - unified status values (0-255)
Definition error_codes.h:49
Ring consensus metrics collection and wire protocol.
ClangTool/LibTooling compatibility shim for stdbool.h.
Callbacks for consensus operations.
Definition consensus.h:119
void * context
Opaque context passed to all callbacks.
Definition consensus.h:124
session_consensus_election_fn election
Custom election callback (optional, NULL = use default)
Definition consensus.h:123
session_consensus_on_election_fn on_election
Election result callback.
Definition consensus.h:121
session_consensus_get_metrics_fn get_metrics
Measure metrics callback.
Definition consensus.h:122
session_consensus_send_packet_fn send_packet
Send packet callback.
Definition consensus.h:120
Session consensus handle - wraps all consensus modules.
Definition consensus.c:21
uint8_t my_id[16]
Definition consensus.c:34