X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=bindings%2Fsamples%2Fave.c;h=ce01c6dc9aad8481d30fb0e868cbfd84a9e989be;hb=e84fc44c47b42651fef17405f5bc09e5079d4a72;hp=3ddfda624ab09af4d67cf063b113343fba8b4598;hpb=9a304ebddac4deb4992ea931ea1131b639798b3b;p=src%2Fapp-framework-binder.git diff --git a/bindings/samples/ave.c b/bindings/samples/ave.c index 3ddfda62..ce01c6dc 100644 --- a/bindings/samples/ave.c +++ b/bindings/samples/ave.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015, 2016, 2017 "IoT.bzh" + * Copyright (C) 2015-2018 "IoT.bzh" * Author José Bollo * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -21,6 +21,7 @@ #include +#define AFB_BINDING_WANT_DYNAPI #define AFB_BINDING_VERSION 0 #include @@ -29,7 +30,7 @@ static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; struct event { struct event *next; - struct afb_eventid *eventid; + afb_eventid *eventid; char tag[1]; }; @@ -147,7 +148,7 @@ static void pingBug (afb_request *request) static void pingEvent(afb_request *request) { json_object *query = afb_request_json(request); - afb_dynapi_broadcast_event(request->dynapi, "event", json_object_get(query)); + afb_dynapi_broadcast_event(request->api, "event", json_object_get(query)); ping(request, json_object_get(query), "event"); } @@ -219,7 +220,7 @@ static void eventadd (afb_request *request) pthread_mutex_lock(&mutex); if (tag == NULL || name == NULL) afb_request_fail(request, "failed", "bad arguments"); - else if (0 != event_add(request->dynapi, tag, name)) + else if (0 != event_add(request->api, tag, name)) afb_request_fail(request, "failed", "creation error"); else afb_request_success(request, NULL, NULL); @@ -305,7 +306,7 @@ static void call (afb_request *request) if (object == NULL) afb_request_fail(request, "failed", "bad arguments"); else - afb_dynapi_call(request->dynapi, api, verb, object, callcb, afb_request_addref(request)); + afb_dynapi_call(request->api, api, verb, object, callcb, afb_request_addref(request)); } static void callsync (afb_request *request) @@ -319,7 +320,7 @@ static void callsync (afb_request *request) if (object == NULL) afb_request_fail(request, "failed", "bad arguments"); else { - rc = afb_dynapi_call_sync(request->dynapi, api, verb, object, &result); + rc = afb_dynapi_call_sync(request->api, api, verb, object, &result); if (rc >= 0) afb_request_success(request, result, NULL); else { @@ -379,7 +380,7 @@ static void broadcast(afb_request *request) afb_request_success(request, NULL, NULL); pthread_mutex_unlock(&mutex); } else if (name != NULL) { - if (0 > afb_dynapi_broadcast_event(request->dynapi, name, object)) + if (0 > afb_dynapi_broadcast_event(request->api, name, object)) afb_request_fail(request, "failed", "broadcast error"); else afb_request_success(request, NULL, NULL); @@ -415,7 +416,7 @@ static void onevent(afb_dynapi *dynapi, const char *event, struct json_object *o { AFB_DYNAPI_NOTICE(dynapi, "received event %s(%s) by AVE(%s)", event, json_object_to_json_string(object), - (const char*)dynapi->userdata); + (const char*)afb_dynapi_get_userdata(dynapi)); } // NOTE: this sample does not use session to keep test a basic as possible @@ -447,19 +448,32 @@ static const struct { { .verb=NULL} }; +static void pingoo(struct afb_req_x1 req) +{ + json_object *args = afb_req_x1_json(req); + afb_req_x1_reply_f(req, json_object_get(args), NULL, "You reached pingoo \\o/ nice args: %s", json_object_to_json_string(args)); +} + +static const struct afb_verb_v2 verbsv2[]= { + { .verb="pingoo", .callback=pingoo }, + { .verb="ping", .callback=pingoo }, + { .verb=NULL} +}; + static const char *apis[] = { "ave", "hi", "salut", NULL }; -static int api_preinit(void *closure, afb_dynapi *dynapi) +static int build_api(void *closure, afb_dynapi *dynapi) { int i, rc; - dynapi->userdata = closure; - AFB_DYNAPI_NOTICE(dynapi, "dynamic binding AVE(%s) comes to live", (const char*)dynapi->userdata); + afb_dynapi_set_userdata(dynapi, closure); + AFB_DYNAPI_NOTICE(dynapi, "dynamic binding AVE(%s) comes to live", (const char*)afb_dynapi_get_userdata(dynapi)); afb_dynapi_on_init(dynapi, init); afb_dynapi_on_event(dynapi, onevent); + rc = afb_dynapi_set_verbs_v2(dynapi, verbsv2); for (i = rc = 0; verbs[i].verb && rc >= 0 ; i++) { - rc = afb_dynapi_add_verb(dynapi, verbs[i].verb, NULL, verbs[i].callback, NULL, 0); + rc = afb_dynapi_add_verb(dynapi, verbs[i].verb, NULL, verbs[i].callback, (void*)(intptr_t)i, NULL, 0); } afb_dynapi_seal(dynapi); return rc; @@ -470,7 +484,9 @@ int afbBindingVdyn(afb_dynapi *dynapi) int i, rc; for (i = 0; apis[i] ; i++) { - rc = afb_dynapi_new_api(dynapi, apis[i], NULL, api_preinit, (void*)apis[i]); + rc = afb_dynapi_new_api(dynapi, apis[i], NULL, 0, build_api, (void*)apis[i]); + if (rc < 0) + AFB_DYNAPI_ERROR(dynapi, "can't create API %s", apis[i]); } return 0; }