#ifndef _JITTERBUG__SERVER_H #define _JITTERBUG__SERVER_H #include "match.h" #include #include // TODO: dynamically size the arrays #define BUS_MAX_CLIENTS 256 #define BUS_MAX_NAMES 512 #define BUS_MAX_MATCH 12 #define BUS_BACKLOG 12 enum { BUS_CLIENT_STATE_NONE, BUS_CLIENT_STATE_WAIT_AUTH, BUS_CLIENT_STATE_WAIT_BEGIN, BUS_CLIENT_STATE_READY }; typedef struct bus_client { int fd; uint8_t state; int16_t unique_name_index; int16_t owned_name_index; int8_t match_count; match_rule_t *matches[BUS_MAX_MATCH]; } bus_client_t; typedef struct bus_name { char *name; int32_t client_index; } bus_name_t; typedef struct bus { int sock_fd; int fd_num; int names_count; int clients_count; bus_client_t clients[BUS_MAX_CLIENTS]; bus_name_t names[BUS_MAX_NAMES]; struct pollfd fds[BUS_MAX_CLIENTS + 1]; } bus_t; int bus_client_add(bus_t *s, int fd); void bus_client_remove(bus_t *s, int i); void bus_free(bus_t *s); bus_t *bus_create(const char *socket_path); int bus_turn(bus_t *s); #endif // _JITTERBUG__SERVER_H