diff --git a/tools/eis-demo-server.c b/tools/eis-demo-server.c index 4415314..a2b284b 100644 --- a/tools/eis-demo-server.c +++ b/tools/eis-demo-server.c @@ -352,6 +352,8 @@ eis_demo_server_printf_handle_event(struct eis_demo_server *server, eis_client_get_name(client)); eis_demo_client_new(server, client); + if (!is_sender) + server->nreceiver_clients++; /* insert sophisticated authentication here */ eis_client_connect(client); @@ -368,6 +370,10 @@ eis_demo_server_printf_handle_event(struct eis_demo_server *server, case EIS_EVENT_CLIENT_DISCONNECT: { struct eis_client *client = eis_event_get_client(e); + bool is_sender = eis_client_is_sender(client); + + if (!is_sender) + server->nreceiver_clients--; colorprint("client %s disconnected\n", eis_client_get_name(client)); eis_client_disconnect(client); @@ -657,7 +663,14 @@ int main(int argc, char **argv) .revents = 0, }; - while (!stop && poll(&fds, 1, 1000) > -1) { + int nevents; + while (!stop && (nevents = poll(&fds, 1, 1000)) > -1) { + if (nevents == 0 && server.nreceiver_clients == 0) + continue; + + uint64_t now = eis_now(eis); + colorprint("now: %" PRIu64 "\n", now); + eis_dispatch(eis); while (true) { @@ -671,8 +684,6 @@ int main(int argc, char **argv) } struct eis_demo_client *democlient; - uint64_t now = eis_now(eis); - colorprint("now: %" PRIu64 "\n", now); const int interval = ms2us(12); /* events are 12ms apart */ list_for_each(democlient, &server.clients, link) { diff --git a/tools/eis-demo-server.h b/tools/eis-demo-server.h index 00adefd..18a1bac 100644 --- a/tools/eis-demo-server.h +++ b/tools/eis-demo-server.h @@ -57,6 +57,7 @@ struct eis_demo_server { } handler; struct list clients; + unsigned int nreceiver_clients; }; #if HAVE_LIBEVDEV