From 8fc107a31b7dd6924e7768a3c47d291047756f3f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C5=99emysl=20Janouch?= Date: Sun, 8 Feb 2015 02:33:02 +0100 Subject: Add an option to expect all client drawing to succeed Alias `no-wait'. So far the server always draws everything. If that stops being the case, we might want to introduce a denial response and additional logic in the client, so that it can fix its own version of the picture. --- autistdraw.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/autistdraw.c b/autistdraw.c index d3215bf..b38eade 100644 --- a/autistdraw.c +++ b/autistdraw.c @@ -112,6 +112,8 @@ struct app_context struct msg_reader msg_reader; ///< Server message reader write_queue_t write_queue; ///< Server write queue + bool no_wait; ///< Don't wait for server confirmations + // Server: int listen_fd; ///< Listening FD ev_io listen_watcher; ///< Listening FD watcher @@ -514,12 +516,14 @@ draw_point_internal (app_context_t *app, int x, int y, uint8_t color) static void draw_point (app_context_t *app, int x, int y, uint8_t color) { - // We don't actually draw anything immediately in client mode, - // instead we wait for confirmation from the server if (app->mode == NETWORK_MODE_CLIENT) { send_draw_point_request (app, x, y, color); - return; + + // We don't usually draw anything immediately in client mode, + // instead we wait for confirmation from the server + if (!app->no_wait) + return; } draw_point_internal (app, x, y, color); @@ -1372,6 +1376,7 @@ struct app_options { struct addrinfo *client_address; ///< Address to connect to struct addrinfo *server_address; ///< Address to listen at + bool no_wait; ///< Don't wait for server confirmations }; static void @@ -1439,6 +1444,8 @@ parse_program_arguments (app_options_t *options, int argc, char **argv) { 'V', "version", NULL, 0, "output version information and exit" }, { 's', "server", "[ADDRESS]:PORT", 0, "start a server" }, { 'c', "client", "[ADDRESS]:PORT", 0, "connect to a server" }, + { 'n', "no-wait", NULL, OPT_LONG_ONLY, + "don't wait for server confirmations" }, { 0, NULL, NULL, 0, NULL } }; @@ -1476,6 +1483,9 @@ parse_program_arguments (app_options_t *options, int argc, char **argv) if (!(options->client_address = parse_address (optarg, 0))) exit (EXIT_FAILURE); break; + case 'n': + options->no_wait = true; + break; default: fprintf (stderr, "%s: %s\n", "error", "wrong options"); opt_handler_usage (&oh, stderr); @@ -1617,6 +1627,7 @@ main (int argc, char *argv[]) else app.mode = NETWORK_MODE_STANDALONE; + app.no_wait = options.no_wait; app_options_free (&options); termo_t *tk = termo_new (STDIN_FILENO, NULL, 0); -- cgit v1.2.3