X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=bindings%2Fsamples%2Ftic-tac-toe.c;h=82e868729750cc29254242e4f336c468f2e13bde;hb=65353dce81a629e042800bb7b86fcd869a76727e;hp=2ee251cbc8a0779e434cfa8d14d8fabae47242c2;hpb=4521c1e7ae5371ab9d639adc617d17fb4e8ded0c;p=src%2Fapp-framework-binder.git diff --git a/bindings/samples/tic-tac-toe.c b/bindings/samples/tic-tac-toe.c index 2ee251cb..82e86872 100644 --- a/bindings/samples/tic-tac-toe.c +++ b/bindings/samples/tic-tac-toe.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016, 2017, 2018 "IoT.bzh" + * Copyright (C) 2015-2020 "IoT.bzh" * Author José Bollo * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -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 */ @@ -469,7 +470,7 @@ static void join(afb_req_t req) /* none is a special id for joining a new session */ if (strcmp(id, "none") == 0) { - new_board = get_new_board(req); + new_board = get_new_board(); goto setctx; } @@ -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 */