From: wang_zhiqiang Date: Fri, 21 Jun 2019 03:12:34 +0000 (+0800) Subject: change subscribe to support array X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=commitdiff_plain;h=dbc98c0c612afef2408d7dbc74a7349ca261c1b6;p=apps%2Fagl-service-homescreen.git change subscribe to support array Change-Id: If5bbd8cb3e69901eec01aa645614b5d7077f60a8 --- diff --git a/src/hs-client.cpp b/src/hs-client.cpp index 5da52bb..efc36b8 100644 --- a/src/hs-client.cpp +++ b/src/hs-client.cpp @@ -171,20 +171,37 @@ int HS_Client::on_screen_reply(afb_req_t request) int HS_Client::subscribe(afb_req_t request) { int ret = 0; - const char *value = afb_req_value(request, _event); - if(value) { - AFB_INFO("subscribe event %s", value); - if(!isSupportEvent(value)) { - AFB_WARNING("subscibe event isn't existing."); - ret = AFB_EVENT_BAD_REQUEST; + struct json_object *ev_obj, *req_obj = afb_req_json(request); + if(json_object_object_get_ex(req_obj, _event, &ev_obj)) { + std::unordered_set ev_set; + if(json_object_get_type(ev_obj) == json_type_string) { + ev_set.insert(json_object_get_string(ev_obj)); + } + else if(json_object_get_type(ev_obj) == json_type_array) { + int array_len = json_object_array_length(ev_obj); + for (int i = 0; i < array_len; ++i) { + struct json_object *obj = json_object_array_get_idx(ev_obj, i); + ev_set.insert(json_object_get_string(obj)); + } } else { - event_list.insert(std::string(value)); - if(!subscription) { - ret = afb_req_subscribe(request, my_event); - if(ret == 0) { - subscription = true; - } + AFB_WARNING("subscibe event type error."); + return AFB_EVENT_BAD_REQUEST; + } + + if(!subscription) { + ret = afb_req_subscribe(request, my_event); + if(ret == 0) { + subscription = true; + } + } + for(auto &it : ev_set) { + AFB_INFO("subscribe event %s", it.c_str()); + if(!isSupportEvent(it.c_str())) { + AFB_WARNING("subscibe event(%s) isn't existing.", it.c_str()); + } + else { + event_list.insert(it.c_str()); } } }