change subscribe to support array
authorwang_zhiqiang <wang_zhiqiang@dl.cn.nexty-ele.com>
Fri, 21 Jun 2019 03:12:34 +0000 (11:12 +0800)
committerwang_zhiqiang <wang_zhiqiang@dl.cn.nexty-ele.com>
Fri, 21 Jun 2019 05:36:34 +0000 (13:36 +0800)
Change-Id: If5bbd8cb3e69901eec01aa645614b5d7077f60a8

src/hs-client.cpp

index 5da52bb..efc36b8 100644 (file)
@@ -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());
             }
         }
     }