diff options
author | Jose Bollo <jose.bollo@iot.bzh> | 2018-08-01 10:24:53 +0200 |
---|---|---|
committer | José Bollo <jose.bollo@iot.bzh> | 2018-08-02 15:49:43 +0200 |
commit | df67c029363f6d42a3e91cd62774c74b3ef66670 (patch) | |
tree | 8f29c9cf3462eacf203baf941f8e92102a49ac14 /bindings/samples | |
parent | b4455a71edcf9030c3b64c8bc13f9d50f1624aa4 (diff) |
tic-tac-toe: improve event handling
Change-Id: Ifba67b4b83650f9b32f78d077d0bbd3d3882238b
Signed-off-by: Jose Bollo <jose.bollo@iot.bzh>
Diffstat (limited to 'bindings/samples')
-rw-r--r-- | bindings/samples/tic-tac-toe.c | 32 |
1 files changed, 17 insertions, 15 deletions
diff --git a/bindings/samples/tic-tac-toe.c b/bindings/samples/tic-tac-toe.c index 2ee251cb..c6acb7c3 100644 --- a/bindings/samples/tic-tac-toe.c +++ b/bindings/samples/tic-tac-toe.c @@ -64,7 +64,7 @@ static struct board *search_board(int id) /* * Creates a new board and returns it. */ -static struct board *get_new_board(afb_req_t req) +static struct board *get_new_board() { /* allocation */ struct board *board = calloc(1, sizeof *board); @@ -78,7 +78,6 @@ static struct board *get_new_board(afb_req_t req) board->id = (rand() >> 2) % 1000; } while(board->id == 0 || search_board(board->id) != NULL); board->event = afb_daemon_make_event("board"); - afb_req_subscribe(req, board->event); /* link */ board->next = all_boards; @@ -86,12 +85,6 @@ static struct board *get_new_board(afb_req_t req) return board; } -static void *get_new_board_cb(void *closure) -{ - afb_req_t req = closure; - return get_new_board(req); -} - /* * Release a board */ @@ -112,12 +105,6 @@ static void release_board(struct board *board) } } -static void release_board_cb(void *closure) -{ - struct board *board = closure; - return release_board(board); -} - /* * Checks who wins * Returns zero if there is no winner @@ -317,6 +304,20 @@ static void changed(struct board *board, const char *reason) afb_event_push(board->event, json_object_new_string(reason)); } +static void *get_new_board_cb(void *closure) +{ + afb_req_t req = closure; + struct board *board = get_new_board(); + afb_req_subscribe(req, board->event); + return board; +} + +static void release_board_cb(void *closure) +{ + struct board *board = closure; + return release_board(board); +} + /* * retrieves the board of the request */ @@ -491,8 +492,9 @@ static void join(afb_req_t req) new_board->use_count++; setctx: /* set the new board (and leaves the previous one) */ - afb_req_context(req, 1, NULL, release_board_cb, new_board); afb_req_unsubscribe(req, board->event); + afb_req_context(req, 1, NULL, release_board_cb, new_board); + afb_req_subscribe(req, new_board->event); success: /* replies */ |