/* event.h - control-plane event bus, never called from byte-processing workers. */ #ifndef NAUT_EVENT_H #define NAUT_EVENT_H #include "naut/common.h" typedef enum { NAUT_EVENT_TORRENT_ADDED, NAUT_EVENT_PIECE_COMPLETE, NAUT_EVENT_FILE_COMPLETE, NAUT_EVENT_TORRENT_FINISHED, NAUT_EVENT_PEER_CONNECTED, NAUT_EVENT_ALERT, } naut_event_type; typedef struct { naut_event_type type; uint64_t torrent_id; uint32_t index; const char *message; const char *path; } naut_event; typedef void (*naut_event_cb)(void *context, const naut_event *event); typedef struct naut_event_bus naut_event_bus; naut_event_bus *naut_event_bus_create(void); void naut_event_bus_destroy(naut_event_bus *bus); /* Subscribe/unsubscribe are control-thread operations. emit snapshots the * subscriber list, allowing callbacks to register work without holding a bus * lock. */ naut_err naut_event_subscribe(naut_event_bus *bus, naut_event_cb callback, void *context, uint64_t *subscription_id); void naut_event_unsubscribe(naut_event_bus *bus, uint64_t subscription_id); void naut_event_emit(naut_event_bus *bus, const naut_event *event); const char *naut_event_type_name(naut_event_type type); bool naut_event_type_parse(const char *name, naut_event_type *type); #endif /* NAUT_EVENT_H */