X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=plugins%2Fsamples%2FHelloWorld.c;h=259b42f13457cdb261546c9a3a27b9baf0217e9a;hb=refs%2Fchanges%2F41%2F5941%2F1;hp=6f9d01d8e9fb32192de2d0159e5a32399fef0ada;hpb=8112056eecede587bf884f56629858c8b21bdbec;p=src%2Fapp-framework-binder.git diff --git a/plugins/samples/HelloWorld.c b/plugins/samples/HelloWorld.c index 6f9d01d8..259b42f1 100644 --- a/plugins/samples/HelloWorld.c +++ b/plugins/samples/HelloWorld.c @@ -19,7 +19,7 @@ #include #include -#include "afb-plugin.h" +#include const struct AFB_interface *interface; @@ -54,7 +54,7 @@ static void pingBug (struct afb_req request) static void pingEvent(struct afb_req request) { json_object *query = afb_req_json(request); - afb_evmgr_push(afb_daemon_get_evmgr(interface->daemon), "event", query); + afb_daemon_broadcast_event(interface->daemon, "event", json_object_get(query)); ping(request, json_object_get(query), "event"); } @@ -76,26 +76,52 @@ static void pingJson (struct afb_req request) { ping(request, jresp, "pingJson"); } +static void subcallcb (void *prequest, int iserror, json_object *object) +{ + struct afb_req request = afb_req_unstore(prequest); + if (iserror) + afb_req_fail(request, "failed", json_object_to_json_string(object)); + else + afb_req_success(request, object, NULL); + afb_req_unref(request); +} + +static void subcall (struct afb_req request) +{ + const char *api = afb_req_value(request, "api"); + const char *verb = afb_req_value(request, "verb"); + const char *args = afb_req_value(request, "args"); + json_object *object = api && verb && args ? json_tokener_parse(args) : NULL; + + if (object == NULL) + afb_req_fail(request, "failed", "bad arguments"); + else + afb_req_subcall(request, api, verb, object, subcallcb, afb_req_store(request)); +} + // NOTE: this sample does not use session to keep test a basic as possible // in real application most APIs should be protected with AFB_SESSION_CHECK -static const struct AFB_restapi pluginApis[]= { +static const struct AFB_verb_desc_v1 verbs[]= { {"ping" , AFB_SESSION_NONE, pingSample , "Ping Application Framework"}, {"pingfail" , AFB_SESSION_NONE, pingFail , "Fails"}, {"pingnull" , AFB_SESSION_NONE, pingNull , "Return NULL"}, {"pingbug" , AFB_SESSION_NONE, pingBug , "Do a Memory Violation"}, {"pingJson" , AFB_SESSION_NONE, pingJson , "Return a JSON object"}, {"pingevent", AFB_SESSION_NONE, pingEvent , "Send an event"}, + {"subcall", AFB_SESSION_NONE, subcall , "Call api/verb(args)"}, {NULL} }; static const struct AFB_plugin plugin_desc = { - .type = AFB_PLUGIN_JSON, - .info = "Minimal Hello World Sample", - .prefix = "hello", - .apis = pluginApis + .type = AFB_PLUGIN_VERSION_1, + .v1 = { + .info = "Minimal Hello World Sample", + .prefix = "hello", + .verbs = verbs + } }; -const struct AFB_plugin *pluginRegister (const struct AFB_interface *itf) +const struct AFB_plugin *pluginAfbV1Register (const struct AFB_interface *itf) { interface = itf; return &plugin_desc;