#ifndef EVENT_H
#define EVENT_H
#include "../public/nsapi.h"
#include <cx/string.h>
#ifdef __cplusplus
extern "C" {
#endif
#define EV_MAX_EVENTS 64
#define EV_IDLE_TIMEOUT 120
#define EV_IDLE_LOOP_CTN 16
typedef struct EVHandler {
EventHandler **instances;
uint32_t numins;
uint32_t current;
} EVHandler;
typedef struct event_handler_conf {
cxstring name;
int nthreads;
int isdefault;
} EventHandlerConfig;
typedef struct EVReturn {
Session *sn;
Request *rq;
int ret;
} EVReturn;
typedef struct EVWatchList EVWatchList;
typedef void(*evwatchlist_destroyfunc)(EventHandler *h, EVWatchList *item);
struct EVWatchList {
time_t created;
time_t expire;
evwatchlist_destroyfunc destroy;
void *data1;
void *data2;
int intdata;
EVWatchList *prev;
EVWatchList *next;
};
typedef struct EventHandler {
EVReturn fnreturn[
EV_MAX_EVENTS];
int numret;
EVWatchList *watchlist_begin;
EVWatchList *watchlist_end;
} EventHandler;
void shutdown_eventhandlers_wait(
void);
void evhandler_shutdown(EVHandler *h);
void evhandler_close(EVHandler *h);
void evhandler_wait_and_destroy(EVHandler *h);
int create_event_handler(EventHandlerConfig *cfg);
int check_event_handler_cfg();
EVHandler* get_default_event_handler();
EVHandler* get_event_handler(
const char *name);
EventHandler* ev_instance(EVHandler *ev);
void watchlist_add(EVWatchList **begin, EVWatchList **end, EVWatchList *elm);
void watchlist_remove(EVWatchList **begin, EVWatchList **end, EVWatchList *elm);
void watchlist_check(EventHandler *h,
time_t t);
EVHandler* evhandler_create(EventHandlerConfig *cfg);
void ev_instance_close(EventHandler *h);
void ev_instance_shutdown(EventHandler *h);
void ev_instance_wait(EventHandler *h);
int ev_pollin(EventHandler *h,
int fd, Event *event);
int ev_pollout(EventHandler *h,
int fd, Event *event);
int ev_remove_poll(EventHandler *h,
int fd);
int ev_send(EventHandler *h, Event *event);
int ev_aioread(
int fd, aiocb_s *cb);
int ev_aiowrite(
int fd, aiocb_s *cb);
int ev_free_event(EventHandler *h, Event *event);
void ev_saf_return(EventHandler *h, Session *sn, Request *rq,
int ret);
void ev_watchlist_add(EventHandler *h, EVWatchList *elm);
void ev_watchlist_remove(EventHandler *h, EVWatchList *elm);
#ifdef __cplusplus
}
#endif
#endif