ascii-chat
Binary v0.15.83-53-gb711d8720
Library lib/v0.3.2-701-gb711d8720
Video chat in your terminal
Loading...
Searching...
No Matches
consensus.h
Go to the documentation of this file.
1
2/* Storage capacities in elements; text buffers include the terminating NUL. */
3
6#include <ascii-chat/common.h>
29
30#pragma once
31
34#include <stdint.h>
35#include <stdbool.h>
36
37#ifdef __cplusplus
38extern "C" {
39#endif
40
46
60 const uint8_t next_participant_id[SESSION_ID_SIZE],
61 const uint8_t *packet, size_t packet_size);
62
82 const char host_address[ACIP_ADDRESS_SIZE],
83 uint16_t host_port,
84 const uint8_t backup_id[SESSION_ID_SIZE],
85 const char backup_address[ACIP_ADDRESS_SIZE],
86 uint16_t backup_port);
87
105 participant_metrics_t *out_metrics);
106
120typedef asciichat_error_t (*session_consensus_election_fn)(void *context, const participant_metrics_t *metrics,
121 int num_metrics, int *out_best_index, int *out_backup_index);
122
137
154 const uint8_t participant_ids[MAX_SESSION_PARTICIPANTS][SESSION_ID_SIZE],
155 int num_participants, const session_consensus_callbacks_t *callbacks,
156 session_consensus_t **out_consensus);
157
164
184
198 const uint8_t participant_ids[MAX_SESSION_PARTICIPANTS][SESSION_ID_SIZE],
199 int num_participants);
200
213 uint64_t deadline_ns);
214
228 const uint8_t sender_id[SESSION_ID_SIZE],
229 const participant_metrics_t *metrics, uint8_t num_metrics);
230
247 const uint8_t host_id[SESSION_ID_SIZE],
248 const char host_address[ACIP_ADDRESS_SIZE], uint16_t host_port,
249 const uint8_t backup_id[SESSION_ID_SIZE],
250 const char backup_address[ACIP_ADDRESS_SIZE],
251 uint16_t backup_port);
252
269 uint8_t out_host_id[SESSION_ID_SIZE],
270 char out_host_address[ACIP_ADDRESS_SIZE], uint16_t *out_host_port,
271 uint8_t out_backup_id[SESSION_ID_SIZE],
272 char out_backup_address[ACIP_ADDRESS_SIZE],
273 uint16_t *out_backup_port);
274
285
293
303
313
314#ifdef __cplusplus
315}
316#endif
#define ACIP_ADDRESS_SIZE
Definition acds_sizes.h:7
Synchronized per-thread pending error stacks and value snapshots. SET_ERRNO pushes,...
⚙️ Common definitions, error codes, macros, and types shared throughout the application
struct session_consensus session_consensus_t
When code needs to work with session consensus, it keeps topology, coordinator, send_packet,...
asciichat_error_t session_consensus_process(session_consensus_t *consensus, uint32_t timeout_ms)
Main consensus processing loop - call periodically.
Definition consensus.c:193
asciichat_error_t session_consensus_set_topology(session_consensus_t *consensus, const uint8_t participant_ids[MAX_SESSION_PARTICIPANTS][SESSION_ID_SIZE], int num_participants)
Update ring topology when participants change.
Definition consensus.c:203
void session_consensus_destroy(session_consensus_t *consensus)
Destroy consensus instance and free all resources.
Definition consensus.c:177
int session_consensus_get_metrics_count(session_consensus_t *consensus)
Get count of metrics collected in current round.
Definition consensus.c:331
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:120
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:230
bool session_consensus_is_ready(session_consensus_t *consensus)
Check if consensus has completed at least one round.
Definition consensus.c:302
asciichat_error_t session_consensus_get_elected_host(session_consensus_t *consensus, uint8_t out_host_id[SESSION_ID_SIZE], char out_host_address[ACIP_ADDRESS_SIZE], uint16_t *out_host_port, uint8_t out_backup_id[SESSION_ID_SIZE], char out_backup_address[ACIP_ADDRESS_SIZE], uint16_t *out_backup_port)
Get the currently elected host.
Definition consensus.c:274
asciichat_error_t(* session_consensus_get_metrics_fn)(void *context, const uint8_t my_id[SESSION_ID_SIZE], participant_metrics_t *out_metrics)
Callback: Measure current participant's network metrics.
Definition consensus.h:104
asciichat_error_t(* session_consensus_send_packet_fn)(void *context, const uint8_t next_participant_id[SESSION_ID_SIZE], const uint8_t *packet, size_t packet_size)
Callback: Send a consensus packet to the next ring participant.
Definition consensus.h:59
asciichat_error_t session_consensus_create(const uint8_t my_id[SESSION_ID_SIZE], bool is_leader, const uint8_t participant_ids[MAX_SESSION_PARTICIPANTS][SESSION_ID_SIZE], int num_participants, const session_consensus_callbacks_t *callbacks, session_consensus_t **out_consensus)
Create a new session consensus instance.
Definition consensus.c:117
int session_consensus_get_state(session_consensus_t *consensus)
Get current consensus state.
Definition consensus.c:315
uint64_t session_consensus_time_until_next_round(session_consensus_t *consensus)
Get time until next consensus round in nanoseconds.
Definition consensus.c:323
asciichat_error_t(* session_consensus_on_election_fn)(void *context, const uint8_t host_id[SESSION_ID_SIZE], const char host_address[ACIP_ADDRESS_SIZE], uint16_t host_port, const uint8_t backup_id[SESSION_ID_SIZE], const char backup_address[ACIP_ADDRESS_SIZE], uint16_t backup_port)
Callback: Handle elected host result.
Definition consensus.h:81
asciichat_error_t session_consensus_on_stats_update(session_consensus_t *consensus, const uint8_t sender_id[SESSION_ID_SIZE], const participant_metrics_t *metrics, uint8_t num_metrics)
Handle incoming STATS_UPDATE packet (metrics relayed around ring).
Definition consensus.c:239
asciichat_error_t session_consensus_on_election_result(session_consensus_t *consensus, const uint8_t host_id[SESSION_ID_SIZE], const char host_address[ACIP_ADDRESS_SIZE], uint16_t host_port, const uint8_t backup_id[SESSION_ID_SIZE], const char backup_address[ACIP_ADDRESS_SIZE], uint16_t backup_port)
Handle incoming ELECTION_RESULT packet from leader.
Definition consensus.c:249
unsigned short uint16_t
Definition common.h:61
unsigned int uint32_t
Definition common.h:62
unsigned long long uint64_t
Definition common.h:63
unsigned char uint8_t
Definition common.h:60
asciichat_error_t
Error and exit codes - unified status values (0-255).
Definition error_codes.h:44
#define MAX_SESSION_PARTICIPANTS
#define SESSION_ID_SIZE
Ring consensus metrics collection and wire protocol.
Mode-specific hooks used by the session consensus adapter.
Definition consensus.h:130
void * context
Opaque context passed to all callbacks.
Definition consensus.h:135
session_consensus_election_fn election
Custom election callback (optional, NULL = use default).
Definition consensus.h:134
session_consensus_on_election_fn on_election
Election result callback.
Definition consensus.h:132
session_consensus_get_metrics_fn get_metrics
Measure metrics callback.
Definition consensus.h:133
session_consensus_send_packet_fn send_packet
Send packet callback.
Definition consensus.h:131
When code needs to work with session consensus, it keeps topology, coordinator, send_packet,...
Definition consensus.c:36
uint8_t my_id[SESSION_ID_SIZE]
Definition consensus.c:49