X-Git-Url: http://git.madism.org/?a=blobdiff_plain;f=common%2Fserver.h;h=2757eae2e931c7728024cb51af21444181e07f9d;hb=a07ba1c6e9bc996a8a5f5bd641870259d7f35b99;hp=239ae37cfc4438f79e2fd47e0408890212166855;hpb=7961b29b3aae8dee45748bf66e30a45c76a47272;p=apps%2Fpfixtools.git diff --git a/common/server.h b/common/server.h index 239ae37..2757eae 100644 --- a/common/server.h +++ b/common/server.h @@ -36,6 +36,7 @@ #ifndef PFIXTOOLS_SERVER_H #define PFIXTOOLS_SERVER_H +#include #include "buffer.h" typedef struct server_t server_t; @@ -45,18 +46,17 @@ typedef void (*delete_client_t)(void*); typedef void *(*start_client_t)(server_t*); typedef int (*run_client_t)(server_t*, void*); typedef bool (*refresh_t)(void*); -typedef bool (*event_handler_t)(void* data, void* config); -struct server_t { - unsigned listener : 1; - unsigned event : 1; +extern struct ev_loop *global_loop; +struct server_t { + struct ev_io io; int fd; - int fd2; buffer_t ibuf; buffer_t obuf; + run_client_t run; delete_client_t clear_data; void* data; }; @@ -64,11 +64,30 @@ ARRAY(server_t); int start_server(int port, start_listener_t starter, delete_client_t deleter); -int event_register(void *data); -bool event_fire(int event); +server_t *server_register(int fd, run_client_t runner, void *data); +void server_delete(server_t **server); +void server_release(server_t *server); + +static inline void server_none(server_t *server) +{ + ev_io_stop(global_loop, &server->io); +} + +static inline void server_rw(server_t *server) +{ + ev_io_stop(global_loop, &server->io); + ev_io_set(&server->io, server->fd, EV_READ | EV_WRITE); + ev_io_start(global_loop, &server->io); +} + +static inline void server_ro(server_t *server) +{ + ev_io_stop(global_loop, &server->io); + ev_io_set(&server->io, server->fd, EV_READ); + ev_io_start(global_loop, &server->io); +} int server_loop(start_client_t starter, delete_client_t deleter, - run_client_t runner, event_handler_t handler, - refresh_t refresh, void *config); + run_client_t runner, refresh_t refresh, void *config); #endif