aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwang_zhiqiang <wang_zhiqiang@dl.cn.nexty-ele.com>2019-06-21 11:12:34 +0800
committerwang_zhiqiang <wang_zhiqiang@dl.cn.nexty-ele.com>2019-06-21 13:36:34 +0800
commitdbc98c0c612afef2408d7dbc74a7349ca261c1b6 (patch)
tree7aed1d77b953510298c8e023c92b4991a13b2942
parent6a6ea200cb3ece69b59d833a411c80f5deea71cd (diff)
change subscribe to support array
Change-Id: If5bbd8cb3e69901eec01aa645614b5d7077f60a8
-rw-r--r--src/hs-client.cpp41
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());
}
}
}