2016-09-13 18:54:26 -07:00
|
|
|
#include "event_loop.h"
|
|
|
|
|
2016-09-23 22:53:58 -07:00
|
|
|
#include "common.h"
|
|
|
|
#include <errno.h>
|
2016-09-13 18:54:26 -07:00
|
|
|
|
2016-09-23 22:53:58 -07:00
|
|
|
#define INITIAL_EVENT_LOOP_SIZE 1024
|
2016-09-13 18:54:26 -07:00
|
|
|
|
2016-10-25 22:39:21 -07:00
|
|
|
event_loop *event_loop_create(void) {
|
2016-09-23 22:53:58 -07:00
|
|
|
return aeCreateEventLoop(INITIAL_EVENT_LOOP_SIZE);
|
2016-09-13 18:54:26 -07:00
|
|
|
}
|
|
|
|
|
2016-09-23 22:53:58 -07:00
|
|
|
void event_loop_destroy(event_loop *loop) {
|
|
|
|
/* Clean up timer events. This is to make valgrind happy. */
|
|
|
|
aeTimeEvent *te = loop->timeEventHead;
|
|
|
|
while (te) {
|
|
|
|
aeTimeEvent *next = te->next;
|
|
|
|
free(te);
|
|
|
|
te = next;
|
2016-09-13 18:54:26 -07:00
|
|
|
}
|
2016-09-23 22:53:58 -07:00
|
|
|
aeDeleteEventLoop(loop);
|
|
|
|
}
|
|
|
|
|
|
|
|
void event_loop_add_file(event_loop *loop,
|
|
|
|
int fd,
|
|
|
|
int events,
|
|
|
|
event_loop_file_handler handler,
|
|
|
|
void *context) {
|
|
|
|
/* Try to add the file descriptor. */
|
|
|
|
int err = aeCreateFileEvent(loop, fd, events, handler, context);
|
|
|
|
/* If it cannot be added, increase the size of the event loop. */
|
|
|
|
if (err == AE_ERR && errno == ERANGE) {
|
|
|
|
err = aeResizeSetSize(loop, 3 * aeGetSetSize(loop) / 2);
|
|
|
|
CHECK(err == AE_OK);
|
|
|
|
err = aeCreateFileEvent(loop, fd, events, handler, context);
|
|
|
|
}
|
|
|
|
/* In any case, test if there were errors. */
|
|
|
|
CHECK(err == AE_OK);
|
2016-09-13 18:54:26 -07:00
|
|
|
}
|
|
|
|
|
2016-09-23 22:53:58 -07:00
|
|
|
void event_loop_remove_file(event_loop *loop, int fd) {
|
|
|
|
aeDeleteFileEvent(loop, fd, EVENT_LOOP_READ | EVENT_LOOP_WRITE);
|
2016-09-13 18:54:26 -07:00
|
|
|
}
|
|
|
|
|
2016-09-23 22:53:58 -07:00
|
|
|
int64_t event_loop_add_timer(event_loop *loop,
|
2016-10-29 15:22:33 -07:00
|
|
|
int64_t timeout,
|
2016-09-23 22:53:58 -07:00
|
|
|
event_loop_timer_handler handler,
|
|
|
|
void *context) {
|
2016-10-29 15:22:33 -07:00
|
|
|
return aeCreateTimeEvent(loop, timeout, handler, context, NULL);
|
2016-09-13 18:54:26 -07:00
|
|
|
}
|
|
|
|
|
2016-10-29 15:22:33 -07:00
|
|
|
int event_loop_remove_timer(event_loop *loop, int64_t id) {
|
|
|
|
return aeDeleteTimeEvent(loop, id);
|
2016-09-13 18:54:26 -07:00
|
|
|
}
|
|
|
|
|
2016-09-23 22:53:58 -07:00
|
|
|
void event_loop_run(event_loop *loop) {
|
|
|
|
aeMain(loop);
|
2016-09-13 18:54:26 -07:00
|
|
|
}
|
|
|
|
|
2016-09-23 22:53:58 -07:00
|
|
|
void event_loop_stop(event_loop *loop) {
|
|
|
|
aeStop(loop);
|
2016-09-13 18:54:26 -07:00
|
|
|
}
|