1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 #ifndef EVENT_H
30 #define EVENT_H
31
32 #include "../public/nsapi.h"
33 #include <cx/string.h>
34
35 #ifdef __cplusplus
36 extern "C" {
37 #endif
38
39 #define EV_MAX_EVENTS 64
40 #define EV_IDLE_TIMEOUT 120
41 #define EV_IDLE_LOOP_CTN 16
42
43
44 typedef struct EVHandler {
45 EventHandler **instances;
46 uint32_t numins;
47 uint32_t current;
48 } EVHandler;
49
50 typedef struct event_handler_conf {
51 cxstring name;
52 int nthreads;
53 int isdefault;
54 } EventHandlerConfig;
55
56 typedef struct EVReturn {
57 Session *sn;
58 Request *rq;
59 int ret;
60 } EVReturn;
61
62 typedef struct EVWatchList EVWatchList;
63 typedef void(*evwatchlist_destroyfunc)(EventHandler *h, EVWatchList *item);
64
65 struct EVWatchList {
66 time_t created;
67 time_t expire;
68 evwatchlist_destroyfunc destroy;
69 void *data1;
70 void *data2;
71 int intdata;
72 EVWatchList *prev;
73 EVWatchList *next;
74 };
75
76
77 typedef struct EventHandler {
78
79
80
81 EVReturn fnreturn[
EV_MAX_EVENTS];
82
83
84
85 int numret;
86
87 EVWatchList *watchlist_begin;
88 EVWatchList *watchlist_end;
89 } EventHandler;
90
91
92 void shutdown_eventhandlers_wait(
void);
93
94 void evhandler_shutdown(EVHandler *h);
95
96 void evhandler_close(EVHandler *h);
97
98 void evhandler_wait_and_destroy(EVHandler *h);
99
100 int create_event_handler(EventHandlerConfig *cfg);
101
102 int check_event_handler_cfg();
103
104 EVHandler* get_default_event_handler();
105
106 EVHandler* get_event_handler(
const char *name);
107
108 EventHandler* ev_instance(EVHandler *ev);
109
110 void watchlist_add(EVWatchList **begin, EVWatchList **end, EVWatchList *elm);
111 void watchlist_remove(EVWatchList **begin, EVWatchList **end, EVWatchList *elm);
112
113 void watchlist_check(EventHandler *h,
time_t t);
114
115
116 EVHandler* evhandler_create(EventHandlerConfig *cfg);
117 void ev_instance_close(EventHandler *h);
118 void ev_instance_shutdown(EventHandler *h);
119 void ev_instance_wait(EventHandler *h);
120
121 int ev_pollin(EventHandler *h,
int fd, Event *event);
122 int ev_pollout(EventHandler *h,
int fd, Event *event);
123 int ev_remove_poll(EventHandler *h,
int fd);
124 int ev_send(EventHandler *h, Event *event);
125
126 int ev_aioread(
int fd, aiocb_s *cb);
127 int ev_aiowrite(
int fd, aiocb_s *cb);
128
129 int ev_free_event(EventHandler *h, Event *event);
130
131 void ev_saf_return(EventHandler *h, Session *sn, Request *rq,
int ret);
132
133 void ev_watchlist_add(EventHandler *h, EVWatchList *elm);
134 void ev_watchlist_remove(EventHandler *h, EVWatchList *elm);
135
136
137 #ifdef __cplusplus
138 }
139 #endif
140
141 #endif
142
143