fix issues
authorzheng_wenlong <wenlong_zheng@nexty-ele.com>
Thu, 27 Jun 2019 05:53:49 +0000 (14:53 +0900)
committerzheng_wenlong <wenlong_zheng@nexty-ele.com>
Thu, 27 Jun 2019 05:53:49 +0000 (14:53 +0900)
src/hs-apprecover.cpp
src/hs-client.cpp
src/hs-clientmanager.cpp
src/hs-vuiadapter.cpp

index e3a84c6..472a9fc 100644 (file)
@@ -160,7 +160,8 @@ void HS_AppRecover::notify(afb_api_t api, std::string appid)
     }
 
     if(m_recovering_set.empty()) {
-        HS_ClientManager::instance()->removeListener(this);
+        clearListenAppSet();
+        // HS_ClientManager::instance()->removeListener(this);
     }
 }
 
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());
             }
         }
     }
index 913e9b6..5d845bb 100644 (file)
@@ -238,6 +238,9 @@ int HS_ClientManager::pushEvent(const char *event, struct json_object *param, st
         if(ip != client_list.end()) {
             ip->second->pushEvent(event, param);
         }
+        else {
+            AFB_INFO("%s client isn't started.", appid.c_str());
+        }
     }
 
     return 0;
index e6837ba..4bfc24d 100644 (file)
@@ -172,7 +172,7 @@ void Vui_Navigation::set_destination(afb_api_t api, struct json_object *object)
  */
 void Vui_Navigation::cancel_navigation(afb_api_t api, struct json_object *object)
 {
-    HS_ClientManager::instance()->pushEvent(_stopNavigation, nullptr);
+    HS_ClientManager::instance()->pushEvent(_stopNavigation, nullptr, _navigation);
 }
 
 /**
@@ -188,11 +188,11 @@ void Vui_Navigation::cancel_navigation(afb_api_t api, struct json_object *object
  */
 void Vui_Navigation::notify(afb_api_t api, std::string appid)
 {
-    this->removeListenAppId(appid);
+    AFB_INFO("recover appid=[%s].", appid.c_str());
     if(isListenAppId(appid)) {
         if (appid == _poi) {
             m_start_flg.first = true;
-            sleep(1);
+            // sleep(1);
             set_destination2poi(api);
         }
         else if(appid == _navigation) {
@@ -204,9 +204,10 @@ void Vui_Navigation::notify(afb_api_t api, std::string appid)
             return;
         }
     }
+
     if(m_start_flg.first && m_start_flg.second) {
         clearListenAppSet();
-        HS_ClientManager::instance()->removeListener(this);
+        // HS_ClientManager::instance()->removeListener(this);
     }
 }
 
@@ -225,7 +226,7 @@ void Vui_Navigation::set_destination2poi(afb_api_t api)
     struct json_object *param = json_object_new_object();
     json_object_object_add(param, _latitudeInDegrees, json_object_new_double(m_dest.first));
     json_object_object_add(param, _longitudeInDegrees, json_object_new_double(m_dest.second));
-    HS_ClientManager::instance()->pushEvent(_setDestination, param);
+    HS_ClientManager::instance()->pushEvent(_setDestination, param, _poi);
 }
 
 /**
@@ -240,7 +241,7 @@ void Vui_Navigation::set_destination2poi(afb_api_t api)
  */
 void Vui_Navigation::start_navigation(afb_api_t api)
 {
-    HS_ClientManager::instance()->pushEvent(_startNavigation, nullptr);
+    HS_ClientManager::instance()->pushEvent(_startNavigation, nullptr, _navigation);
     HS_ClientManager::instance()->pushEvent("showWindow", nullptr, _navigation);
 }
 
@@ -282,6 +283,9 @@ void HS_VuiAdapter::init(afb_api_t api)
         AFB_INFO("%s api isn't existing.", _vshl_capabilities);
         return;
     }
+    else {
+        AFB_INFO("%s api is existing.", _vshl_capabilities);
+    }
 
     std::string uid = std::string(_vui_prefixe) + std::string("-") + _navigation;
     module_list[uid] = new Vui_Navigation(uid);