From de4ff7944811d8ad7ef0bd95c032df953034bab3 Mon Sep 17 00:00:00 2001 From: zheng_wenlong Date: Thu, 27 Jun 2019 14:53:49 +0900 Subject: fix issues --- src/hs-apprecover.cpp | 3 ++- src/hs-client.cpp | 41 +++++++++++++++++++++++++++++------------ src/hs-clientmanager.cpp | 3 +++ src/hs-vuiadapter.cpp | 16 ++++++++++------ 4 files changed, 44 insertions(+), 19 deletions(-) diff --git a/src/hs-apprecover.cpp b/src/hs-apprecover.cpp index e3a84c6..472a9fc 100644 --- a/src/hs-apprecover.cpp +++ b/src/hs-apprecover.cpp @@ -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); } } 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()); } } } diff --git a/src/hs-clientmanager.cpp b/src/hs-clientmanager.cpp index 913e9b6..5d845bb 100644 --- a/src/hs-clientmanager.cpp +++ b/src/hs-clientmanager.cpp @@ -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; diff --git a/src/hs-vuiadapter.cpp b/src/hs-vuiadapter.cpp index e6837ba..4bfc24d 100644 --- a/src/hs-vuiadapter.cpp +++ b/src/hs-vuiadapter.cpp @@ -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); -- cgit 1.2.3-korg