69 lines
1.7 KiB
C
69 lines
1.7 KiB
C
#ifndef MESSAGE_INCLUDED
|
|
#define MESSAGE_INCLUDED
|
|
|
|
#include "tcp.h"
|
|
|
|
#define MESSAGE_SYSTEM_NODE_LIMIT 8
|
|
|
|
typedef struct {
|
|
bool used;
|
|
uint16_t gen;
|
|
int senders[MESSAGE_SYSTEM_NODE_LIMIT];
|
|
int num_senders;
|
|
void* message;
|
|
} ConnMetadata;
|
|
|
|
typedef struct {
|
|
|
|
TCP tcp;
|
|
|
|
Address addrs[MESSAGE_SYSTEM_NODE_LIMIT];
|
|
int num_addrs;
|
|
|
|
int max_conns;
|
|
ConnMetadata *conns;
|
|
} MessageSystem;
|
|
|
|
typedef struct {
|
|
uint16_t version;
|
|
uint16_t type;
|
|
uint16_t sender;
|
|
uint64_t length;
|
|
} Message;
|
|
|
|
int message_system_init(MessageSystem *msys,
|
|
Address *addrs, int num_addrs);
|
|
|
|
int message_system_free(MessageSystem *msys);
|
|
|
|
int message_system_listen_tcp(MessageSystem *msys, Address addr);
|
|
int message_system_listen_tls(MessageSystem *msys, Address addr);
|
|
|
|
void message_system_process_events(MessageSystem *msys,
|
|
void **ptrs, struct pollfd *arr, int num);
|
|
|
|
int message_system_register_events(MessageSystem *msys,
|
|
void **ptrs, struct pollfd *arr, int cap);
|
|
|
|
void *get_next_message(MessageSystem *msys);
|
|
|
|
void consume_message(MessageSystem *msys, void *ptr);
|
|
|
|
void send_message(MessageSystem *msys, int target, Message *message);
|
|
|
|
void send_message_ex(MessageSystem *msys, int target,
|
|
Message *header, void *extra, int extra_len);
|
|
|
|
void reply_to_message(MessageSystem *msys, void *incoming_message,
|
|
Message *outgoing_message);
|
|
|
|
void reply_to_message_ex(MessageSystem *msys, void *incoming_message,
|
|
Message *outgoing_message, void *extra, int extra_len);
|
|
|
|
void broadcast_message(MessageSystem *msys, int self_idx, Message *message);
|
|
|
|
void broadcast_message_ex(MessageSystem *msys, int self_idx,
|
|
Message *header, void *extra, int extra_len);
|
|
|
|
#endif // MESSAGE_INCLUDED
|