X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fhs-clientmanager.cpp;h=913e9b671444c2cd9c13709f9fd93005aa4b6fc1;hb=c1dfe704bffedc07c5272cd84fb882bb196eb841;hp=86e1f28d9da0433eb6b8b0f4b10f6224afcadda9;hpb=fa01549aba442decaf7c6d5b655da2d15d1a32ed;p=apps%2Fagl-service-homescreen.git diff --git a/src/hs-clientmanager.cpp b/src/hs-clientmanager.cpp index 86e1f28..913e9b6 100644 --- a/src/hs-clientmanager.cpp +++ b/src/hs-clientmanager.cpp @@ -20,6 +20,8 @@ #include "hs-apprecover.h" static const char _homescreen[] = "homescreen"; +static const char _area[] = "area"; +static const char _parameter[] = "parameter"; HS_ClientManager* HS_ClientManager::me = nullptr; @@ -72,7 +74,7 @@ HS_ClientManager* HS_ClientManager::instance(void) */ int HS_ClientManager::init(void) { - AFB_NOTICE("called."); + listener_list.clear(); } /** @@ -199,7 +201,7 @@ int HS_ClientManager::handleRequest(afb_req_t request, const char *verb, const c } } if(isRegisterApp) { - checkRegisterApp(request->api, std::string(appid)); + notifyListener(request->api, std::string(appid)); } return ret; } @@ -242,7 +244,54 @@ int HS_ClientManager::pushEvent(const char *event, struct json_object *param, st } /** - * check register application + * check whether application was started + * + * #### Parameters + * - appid : application's id + * + * #### Return + * true : started + * false : not start + * + */ +bool HS_ClientManager::isAppStarted(const std::string &appid) +{ + auto it = client_list.find(appid); + return it != client_list.end() ? true : false; +} + +/** + * add app register listener + * + * #### Parameters + * - listener_interface : listener interface + * + * #### Return + * None + * + */ +void HS_ClientManager::addListener(listener_interface* listener) +{ + listener_list[listener->myUid()] = listener; +} + +/** + * remove app register listener + * + * #### Parameters + * - listener_interface : listener interface + * + * #### Return + * None + * + */ +void HS_ClientManager::removeListener(listener_interface* listener) +{ + listener_list.erase(listener->myUid()); +} + +/** + * notify listener * * #### Parameters * - api : the api @@ -252,15 +301,20 @@ int HS_ClientManager::pushEvent(const char *event, struct json_object *param, st * None * */ -void HS_ClientManager::checkRegisterApp(afb_api_t api, const std::string &appid) +void HS_ClientManager::notifyListener(afb_api_t api, const std::string &appid) { - if(HS_AppRecover::instance()->registerRecoveredApp(api, appid)) { - AFB_INFO("register recover application."); - return; + AFB_INFO("listen %s, notified", appid.c_str()); + for(auto &it : listener_list) { + if(it.second->isListenAppId(appid)) { + it.second->notify(api, appid); + } } if(startup_appid == appid) { + struct json_object* json_param = json_object_new_object(); + json_object_object_add(json_param, _area, json_object_new_string(startup_area.c_str())); + startup_area.clear(); startup_appid.clear(); - pushEvent("showWindow", nullptr, appid); + pushEvent("showWindow", json_param, appid); } } \ No newline at end of file