}
static void
-lws_accept_cb(struct ev_loop *loop, struct ev_io *watcher, int revents)
+lws_accept_cb(uv_poll_t *watcher, int status, int revents)
{
struct lws_io_watcher *lws_io = container_of(watcher,
struct lws_io_watcher, watcher);
struct lws_context *context = lws_io->context;
struct lws_pollfd eventfd;
- if (revents & EV_ERROR)
- return;
+ if (status < 0/*revents & EV_ERROR*/)
+ return;
- eventfd.fd = watcher->fd;
+ eventfd.fd = watcher->io_watcher.fd;
eventfd.events = 0;
- eventfd.revents = EV_NONE;
- if (revents & EV_READ) {
+ eventfd.revents = 0;//EV_NONE;
+ if (revents & UV_READABLE) {
eventfd.events |= LWS_POLLIN;
eventfd.revents |= LWS_POLLIN;
}
- if (revents & EV_WRITE) {
+ if (revents & UV_WRITABLE) {
eventfd.events |= LWS_POLLOUT;
eventfd.revents |= LWS_POLLOUT;
}
}
LWS_VISIBLE void
-lws_sigint_cb(struct ev_loop *loop, struct ev_signal *watcher, int revents)
+lws_sigint_cb(uv_loop_t *loop, uv_signal_t *watcher, int revents)
{
- ev_break(loop, EVBREAK_ALL);
+ //ev_break(loop, EVBREAK_ALL);
}
LWS_VISIBLE int
}
LWS_VISIBLE int
-lws_initloop(struct lws_context *context, struct ev_loop *loop)
+lws_initloop(struct lws_context *context, uv_loop_t *loop)
{
- struct ev_signal *w_sigint = &context->w_sigint.watcher;
- struct ev_io *w_accept = &context->w_accept.watcher;
- const char * backend_name;
+ //uv_signal_t *w_sigint = &context->w_sigint.watcher;
+ uv_poll_t *w_accept = &context->w_accept.watcher;
+ //const char * backend_name;
int status = 0;
- int backend;
- int m = 0; /* !!! TODO add pt support */
+ //int backend;
+ int m = 0; /* !!! TODO add pt support */
if (!loop)
- loop = ev_default_loop(0);
+ loop = uv_default_loop();
context->io_loop = loop;
* Initialize the accept w_accept with the listening socket
* and register a callback for read operations
*/
- ev_io_init(w_accept, lws_accept_cb, context->pt[m].lserv_fd, EV_READ);
- ev_io_start(context->io_loop,w_accept);
+ uv_poll_init(context->io_loop, w_accept, context->pt[m].lserv_fd);
+ uv_poll_start(w_accept, UV_READABLE, lws_accept_cb);
+ //ev_io_init(w_accept, lws_accept_cb, context->pt[m].lserv_fd, UV_READABLE);
+ //ev_io_start(context->io_loop,w_accept);
/* Register the signal watcher unless the user says not to */
if (context->use_ev_sigint) {
- ev_signal_init(w_sigint, context->lws_ev_sigint_cb, SIGINT);
- ev_signal_start(context->io_loop,w_sigint);
+ //ev_signal_init(w_sigint, context->lws_ev_sigint_cb, SIGINT);
+ //ev_signal_start(context->io_loop,w_sigint);
}
- backend = ev_backend(loop);
+ /*backend = ev_backend(loop);
switch (backend) {
case EVBACKEND_SELECT:
break;
}
- lwsl_notice(" libev backend: %s\n", backend_name);
+ lwsl_notice(" libev backend: %s\n", backend_name);*/
return status;
}
lws_libev_accept(struct lws *new_wsi, int accept_fd)
{
struct lws_context *context = lws_get_context(new_wsi);
- struct ev_io *r = &new_wsi->w_read.watcher;
- struct ev_io *w = &new_wsi->w_write.watcher;
+ uv_poll_t *r = &new_wsi->w_read.watcher;
+ //uv_poll_t *w = &new_wsi->w_write.watcher;
if (!LWS_LIBEV_ENABLED(context))
return;
new_wsi->w_read.context = context;
new_wsi->w_write.context = context;
- ev_io_init(r, lws_accept_cb, accept_fd, EV_READ);
- ev_io_init(w, lws_accept_cb, accept_fd, EV_WRITE);
+ uv_poll_init(context->io_loop, r, accept_fd);
+ //ev_io_init(r, lws_accept_cb, accept_fd, UV_READABLE);
+ //ev_io_init(w, lws_accept_cb, accept_fd, UV_WRITABLE);
}
LWS_VISIBLE void
lws_libev_io(struct lws *wsi, int flags)
{
struct lws_context *context = lws_get_context(wsi);
+ int current_events = wsi->w_read.watcher.io_watcher.pevents & (UV_READABLE | UV_WRITABLE);
if (!LWS_LIBEV_ENABLED(context))
return;
(flags & (LWS_EV_READ | LWS_EV_WRITE)));
if (flags & LWS_EV_START) {
- if (flags & LWS_EV_WRITE)
- ev_io_start(context->io_loop, &wsi->w_write.watcher);
- if (flags & LWS_EV_READ)
- ev_io_start(context->io_loop, &wsi->w_read.watcher);
+ if (flags & LWS_EV_WRITE)
+ current_events |= UV_WRITABLE;
+ //ev_io_start(context->io_loop, &wsi->w_write.watcher);
+ if (flags & LWS_EV_READ)
+ current_events |= UV_READABLE;
+ //ev_io_start(context->io_loop, &wsi->w_read.watcher);
+
+ uv_poll_start(&wsi->w_read.watcher, current_events, lws_accept_cb);
} else {
- if (flags & LWS_EV_WRITE)
- ev_io_stop(context->io_loop, &wsi->w_write.watcher);
- if (flags & LWS_EV_READ)
- ev_io_stop(context->io_loop, &wsi->w_read.watcher);
+ if (flags & LWS_EV_WRITE)
+ current_events &= ~UV_WRITABLE;
+ //ev_io_stop(context->io_loop, &wsi->w_write.watcher);
+ if (flags & LWS_EV_READ)
+ current_events &= ~UV_READABLE;
+ //ev_io_stop(context->io_loop, &wsi->w_read.watcher);
+
+ if (!(current_events & (UV_READABLE | UV_WRITABLE)))
+ uv_poll_stop(&wsi->w_read.watcher);
+ else
+ uv_poll_start(&wsi->w_read.watcher, current_events, lws_accept_cb);
}
}
lws_libev_run(const struct lws_context *context)
{
if (context->io_loop && LWS_LIBEV_ENABLED(context))
- ev_run(context->io_loop, 0);
+ uv_run(context->io_loop, 0);
}