diff options
author | wang_zhiqiang <wang_zhiqiang@dl.cn.nexty-ele.com> | 2019-06-21 11:12:34 +0800 |
---|---|---|
committer | wang_zhiqiang <wang_zhiqiang@dl.cn.nexty-ele.com> | 2019-06-21 13:36:34 +0800 |
commit | dbc98c0c612afef2408d7dbc74a7349ca261c1b6 (patch) | |
tree | 7aed1d77b953510298c8e023c92b4991a13b2942 | |
parent | 6a6ea200cb3ece69b59d833a411c80f5deea71cd (diff) |
change subscribe to support array
Change-Id: If5bbd8cb3e69901eec01aa645614b5d7077f60a8
-rw-r--r-- | src/hs-client.cpp | 41 |
1 files changed, 29 insertions, 12 deletions
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<std::string> 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()); } } } |