diff options
author | wang_zhiqiang <wang_zhiqiang@dl.cn.nexty-ele.com> | 2019-01-14 13:50:55 +0800 |
---|---|---|
committer | wang_zhiqiang <wang_zhiqiang@dl.cn.nexty-ele.com> | 2019-01-14 13:50:55 +0800 |
commit | d6140dad95f7884f8a7a666a125c1b24065d2c60 (patch) | |
tree | a301d503c528f0278aa6b23090de298cff57fdbd | |
parent | 8788711b78485032f334939d8d3ddfc319189cd2 (diff) | |
parent | 0558bdbf99233fb2391ba32cc91ec126e1ca6c1a (diff) |
merge improvement
Change-Id: I555f0e48ff96564695af60e8d2dbbc1379a8bc95
-rw-r--r-- | src/homescreen.cpp | 232 | ||||
-rw-r--r-- | src/hs-client.cpp | 281 | ||||
-rw-r--r-- | src/hs-client.h | 37 | ||||
-rw-r--r-- | src/hs-clientmanager.cpp | 312 | ||||
-rw-r--r-- | src/hs-clientmanager.h | 14 | ||||
-rw-r--r-- | src/hs-periphery.cpp | 13 | ||||
-rw-r--r-- | src/hs-periphery.h | 12 |
7 files changed, 377 insertions, 524 deletions
diff --git a/src/homescreen.cpp b/src/homescreen.cpp index 0f6a10d..a6eee8f 100644 --- a/src/homescreen.cpp +++ b/src/homescreen.cpp @@ -96,17 +96,25 @@ static void pingSample(afb_req_t request) static void tap_shortcut (afb_req_t request) { HMI_NOTICE("homescreen-service","called."); - int ret = g_hs_instance->client_manager->tap_shortcut(request); - if (ret != 0) { - afb_req_fail_f(request, "failed", "called %s, Unknown parameter", __FUNCTION__); - return; + int ret = 0; + const char* value = afb_req_value(request, _application_id); + if (value) { + HMI_NOTICE("homescreen-service","request appid = %s.", value); + ret = g_hs_instance->client_manager->handleRequest(request, __FUNCTION__, value); + } + else { + ret = AFB_EVENT_BAD_REQUEST; } - // response to HomeScreen - struct json_object *res = json_object_new_object(); - hs_add_object_to_json_object_func(res, __FUNCTION__, 2, - _error, ret); - afb_req_success(request, res, "afb_event_push event [tap_shortcut]"); + if (ret) { + afb_req_fail_f(request, "failed", "called %s, Unknown parameter", __FUNCTION__); + } + else { + struct json_object *res = json_object_new_object(); + hs_add_object_to_json_object_func(res, __FUNCTION__, 2, + _error, ret); + afb_req_success(request, res, "afb_event_push event [tap_shortcut]"); + } } /** @@ -123,18 +131,16 @@ static void tap_shortcut (afb_req_t request) static void on_screen_message (afb_req_t request) { HMI_NOTICE("homescreen-service","called."); - - int ret = g_hs_instance->client_manager->on_screen_message(request); - if (ret != 0) { - afb_req_fail_f(request, "failed", "called %s, Unknown parameter", __FUNCTION__); - return; + int ret = g_hs_instance->client_manager->handleRequest(request, __FUNCTION__); + if (ret) { + afb_req_fail_f(request, "failed", "called %s, Unknown parameter", __FUNCTION__); + } + else { + struct json_object *res = json_object_new_object(); + hs_add_object_to_json_object_func(res, __FUNCTION__, 2, + _error, ret); + afb_req_success(request, res, "afb_event_push event [on_screen_message]"); } - - // response to HomeScreen - struct json_object *res = json_object_new_object(); - hs_add_object_to_json_object_func(res, __FUNCTION__, 2, - _error, ret); - afb_req_success(request, res, "afb_event_push event [on_screen_message]"); } /** @@ -151,18 +157,16 @@ static void on_screen_message (afb_req_t request) static void on_screen_reply (afb_req_t request) { HMI_NOTICE("homescreen-service","called."); - - int ret = g_hs_instance->client_manager->on_screen_reply(request); - if (ret != 0) { - afb_req_fail_f(request, "failed", "called %s, Unknown parameter", __FUNCTION__); - return; + int ret = g_hs_instance->client_manager->handleRequest(request, __FUNCTION__); + if (ret) { + afb_req_fail_f(request, "failed", "called %s, Unknown parameter", __FUNCTION__); + } + else { + struct json_object *res = json_object_new_object(); + hs_add_object_to_json_object_func(res, __FUNCTION__, 2, + _error, ret); + afb_req_success(request, res, "afb_event_push event [on_screen_reply]"); } - - // response to HomeScreen - struct json_object *res = json_object_new_object(); - hs_add_object_to_json_object_func(res, __FUNCTION__, 2, - _error, ret); - afb_req_success(request, res, "afb_event_push event [on_screen_reply]"); } /** @@ -178,18 +182,24 @@ static void on_screen_reply (afb_req_t request) static void subscribe(afb_req_t request) { HMI_NOTICE("homescreen-service","called."); + int ret = 0; + std::string req_appid = std::move(get_application_id(request)); + if(!req_appid.empty()) { + ret = g_hs_instance->client_manager->handleRequest(request, __FUNCTION__, req_appid.c_str()); + } + else { + ret = AFB_EVENT_BAD_REQUEST; + } - int ret = g_hs_instance->client_manager->subscribe(request); if(ret) { - afb_req_fail_f(request, "afb_req_subscribe failed", "called %s.", __FUNCTION__); - return; + afb_req_fail_f(request, "afb_req_subscribe failed", "called %s.", __FUNCTION__); + } + else { + struct json_object *res = json_object_new_object(); + hs_add_object_to_json_object_func(res, __FUNCTION__, 2, + _error, ret); + afb_req_success_f(request, res, "homescreen binder subscribe."); } - - /*create response json object*/ - struct json_object *res = json_object_new_object(); - hs_add_object_to_json_object_func(res, __FUNCTION__, 2, - _error, ret); - afb_req_success_f(request, res, "homescreen binder subscribe."); } /** @@ -205,18 +215,24 @@ static void subscribe(afb_req_t request) static void unsubscribe(afb_req_t request) { HMI_NOTICE("homescreen-service","called."); + int ret = 0; + std::string req_appid = std::move(get_application_id(request)); + if(!req_appid.empty()) { + ret = g_hs_instance->client_manager->handleRequest(request, __FUNCTION__, req_appid.c_str()); + } + else { + ret = AFB_EVENT_BAD_REQUEST; + } - int ret = g_hs_instance->client_manager->unsubscribe(request); if(ret) { - afb_req_fail_f(request, "afb_req_unsubscribe failed", "called %s.", __FUNCTION__); - return; + afb_req_fail_f(request, "afb_req_unsubscribe failed", "called %s.", __FUNCTION__); + } + else { + struct json_object *res = json_object_new_object(); + hs_add_object_to_json_object_func(res, __FUNCTION__, 2, + _error, ret); + afb_req_success_f(request, res, "homescreen binder unsubscribe success."); } - - /*create response json object*/ - struct json_object *res = json_object_new_object(); - hs_add_object_to_json_object_func(res, __FUNCTION__, 2, - _error, ret); - afb_req_success_f(request, res, "homescreen binder unsubscribe success."); } /** @@ -232,18 +248,24 @@ static void unsubscribe(afb_req_t request) static void showWindow(afb_req_t request) { HMI_NOTICE("homescreen-service","called."); - - int ret = g_hs_instance->client_manager->showWindow(request); - if (ret != 0) { - afb_req_fail_f(request, "failed", "called %s, Unknown parameter", __FUNCTION__); - return; + int ret = 0; + const char* value = afb_req_value(request, _application_id); + if (value) { + ret = g_hs_instance->client_manager->handleRequest(request, __FUNCTION__, value); + } + else { + ret = AFB_EVENT_BAD_REQUEST; } - // response to HomeScreen - struct json_object *res = json_object_new_object(); - hs_add_object_to_json_object_func(res, __FUNCTION__, 2, - _error, ret); - afb_req_success(request, res, "afb_event_push event [showWindow]"); + if (ret) { + afb_req_fail_f(request, "failed", "called %s, Unknown parameter", __FUNCTION__); + } + else { + struct json_object *res = json_object_new_object(); + hs_add_object_to_json_object_func(res, __FUNCTION__, 2, + _error, ret); + afb_req_success(request, res, "afb_event_push event [showWindow]"); + } } /** @@ -259,18 +281,24 @@ static void showWindow(afb_req_t request) static void hideWindow(afb_req_t request) { HMI_NOTICE("homescreen-service","called."); - - int ret = g_hs_instance->client_manager->hideWindow(request); - if (ret != 0) { - afb_req_fail_f(request, "failed", "called %s, Unknown parameter", __FUNCTION__); - return; + int ret = 0; + const char* value = afb_req_value(request, _application_id); + if (value) { + ret = g_hs_instance->client_manager->handleRequest(request, __FUNCTION__, value); + } + else { + ret = AFB_EVENT_BAD_REQUEST; } - // response to HomeScreen - struct json_object *res = json_object_new_object(); - hs_add_object_to_json_object_func(res, __FUNCTION__, 2, - _error, ret); - afb_req_success(request, res, "afb_event_push event [hideWindow]"); + if (ret) { + afb_req_fail_f(request, "failed", "called %s, Unknown parameter", __FUNCTION__); + } + else { + struct json_object *res = json_object_new_object(); + hs_add_object_to_json_object_func(res, __FUNCTION__, 2, + _error, ret); + afb_req_success(request, res, "afb_event_push event [hideWindow]"); + } } /** @@ -286,18 +314,24 @@ static void hideWindow(afb_req_t request) static void replyShowWindow(afb_req_t request) { HMI_NOTICE("homescreen-service","called."); - - int ret = g_hs_instance->client_manager->replyShowWindow(request); - if (ret != 0) { - afb_req_fail_f(request, "failed", "called %s, Unknown parameter", __FUNCTION__); - return; + int ret = 0; + const char* value = afb_req_value(request, _application_id); + if (value) { + ret = g_hs_instance->client_manager->handleRequest(request, __FUNCTION__, value); + } + else { + ret = AFB_EVENT_BAD_REQUEST; } - // response to HomeScreen - struct json_object *res = json_object_new_object(); - hs_add_object_to_json_object_func(res, __FUNCTION__, 2, - _error, ret); - afb_req_success(request, res, "afb_event_push event [replyShowWindow]"); + if (ret) { + afb_req_fail_f(request, "failed", "called %s, Unknown parameter", __FUNCTION__); + } + else { + struct json_object *res = json_object_new_object(); + hs_add_object_to_json_object_func(res, __FUNCTION__, 2, + _error, ret); + afb_req_success(request, res, "afb_event_push event [replyShowWindow]"); + } } /** @@ -315,18 +349,16 @@ static void replyShowWindow(afb_req_t request) static void showNotification(afb_req_t request) { HMI_NOTICE("homescreen-service","called."); - - int ret = g_hs_instance->client_manager->showNotification(request); - if (ret != 0) { - afb_req_fail_f(request, "failed", "called %s, Unknown parameter", __FUNCTION__); - return; + int ret = g_hs_instance->client_manager->handleRequest(request, __FUNCTION__, "homescreen"); + if (ret) { + afb_req_fail_f(request, "failed", "called %s, Unknown parameter", __FUNCTION__); + } + else { + struct json_object *res = json_object_new_object(); + hs_add_object_to_json_object_func(res, __FUNCTION__, 2, + _error, ret); + afb_req_success(request, res, "afb_event_push event [showNotification]"); } - - // response to Application - struct json_object *res = json_object_new_object(); - hs_add_object_to_json_object_func(res, __FUNCTION__, 2, - _error, ret); - afb_req_success(request, res, "afb_event_push event [showNotification]"); } /** @@ -344,18 +376,16 @@ static void showNotification(afb_req_t request) static void showInformation(afb_req_t request) { HMI_NOTICE("homescreen-service","called."); - - int ret = g_hs_instance->client_manager->showInformation(request); - if (ret != 0) { - afb_req_fail_f(request, "failed", "called %s, Unknown parameter", __FUNCTION__); - return; + int ret = g_hs_instance->client_manager->handleRequest(request, __FUNCTION__, "homescreen"); + if (ret) { + afb_req_fail_f(request, "failed", "called %s, Unknown parameter", __FUNCTION__); + } + else { + struct json_object *res = json_object_new_object(); + hs_add_object_to_json_object_func(res, __FUNCTION__, 2, + _error, ret); + afb_req_success(request, res, "afb_event_push event [showInformation]"); } - - // response to Application - struct json_object *res = json_object_new_object(); - hs_add_object_to_json_object_func(res, __FUNCTION__, 2, - _error, ret); - afb_req_success(request, res, "afb_event_push event [showInformation]"); } /* diff --git a/src/hs-client.cpp b/src/hs-client.cpp index 41be426..5ecc23b 100644 --- a/src/hs-client.cpp +++ b/src/hs-client.cpp @@ -18,12 +18,14 @@ #include "hs-helper.h" #include "hmi-debug.h" +static const char _event[] = "event"; static const char _type[] = "type"; static const char _text[] = "text"; static const char _info[] = "info"; static const char _icon[] = "icon"; static const char _parameter[] = "parameter"; static const char _replyto[] = "replyto"; +static const char _caller[] = "caller"; /** * HS_Client construction function @@ -61,20 +63,18 @@ HS_Client::~HS_Client() * push tap_shortcut event * * #### Parameters - * - appid: app's id. + * - request : the request * * #### Return - * result + * 0 : success + * others : fail * */ -int HS_Client::tap_shortcut(const char* appid) +int HS_Client::tap_shortcut(afb_req_t request) { - if(!checkEvent(__FUNCTION__)) - return 0; - - HMI_NOTICE("homescreen-service","%s application_id = %s.", __FUNCTION__, appid); + HMI_NOTICE("homescreen-service","request appid = %s.", my_id.c_str()); struct json_object* push_obj = json_object_new_object(); - hs_add_object_to_json_object_str( push_obj, 4, _application_id, appid, + hs_add_object_to_json_object_str( push_obj, 4, _application_id, my_id.c_str(), _type, __FUNCTION__); afb_event_push(my_event, push_obj); return 0; @@ -84,71 +84,96 @@ int HS_Client::tap_shortcut(const char* appid) * push on_screen_message event * * #### Parameters - * - message: post message. + * - request : the request * * #### Return - * result + * 0 : success + * others : fail * */ -int HS_Client::on_screen_message(afb_req_t request, const char* message) +int HS_Client::on_screen_message(afb_req_t request) { - if(!checkEvent(__FUNCTION__)) - return 0; - - HMI_NOTICE("homescreen-service","push %s event message [%s].", __FUNCTION__, message); - struct json_object* push_obj = json_object_new_object(); - hs_add_object_to_json_object_str( push_obj, 4, _display_message, message, - _type, __FUNCTION__); - afb_event_push(my_event, push_obj); - return 0; + int ret = 0; + const char* value = afb_req_value(request, _display_message); + if (value) { + HMI_NOTICE("homescreen-service","push %s event message [%s].", __FUNCTION__, value); + struct json_object* push_obj = json_object_new_object(); + hs_add_object_to_json_object_str( push_obj, 4, _display_message, value, + _type, __FUNCTION__); + afb_event_push(my_event, push_obj); + } + else { + HMI_NOTICE("homescreen-service","Please input display_message"); + ret = AFB_EVENT_BAD_REQUEST; + } + return ret; } /** * push on_screen_reply event * * #### Parameters - * - message: reply message. + * - request : the request * * #### Return - * result + * 0 : success + * others : fail * */ -int HS_Client::on_screen_reply(afb_req_t request, const char* message) +int HS_Client::on_screen_reply(afb_req_t request) { - if(!checkEvent(__FUNCTION__)) - return 0; - - HMI_NOTICE("homescreen-service","push %s event message [%s].", __FUNCTION__, message); - struct json_object* push_obj = json_object_new_object(); - hs_add_object_to_json_object_str( push_obj, 4, _reply_message, message, - _type, __FUNCTION__); - afb_event_push(my_event, push_obj); - return 0; + int ret = 0; + const char* value = afb_req_value(request, _reply_message); + if (value) { + HMI_NOTICE("homescreen-service","push %s event message [%s].", __FUNCTION__, value); + struct json_object* push_obj = json_object_new_object(); + hs_add_object_to_json_object_str( push_obj, 4, _reply_message, value, + _type, __FUNCTION__); + afb_event_push(my_event, push_obj); + } + else { + HMI_NOTICE("homescreen-service","Please input reply_message"); + ret = AFB_EVENT_BAD_REQUEST; + } + return ret; } /** * subscribe event * * #### Parameters - * - event: homescreen event, tap_shortcut etc. + * - request : the request * * #### Return - * result + * 0 : success + * others : fail * */ -int HS_Client::subscribe(afb_req_t request, const char* event) +int HS_Client::subscribe(afb_req_t request) { + HMI_NOTICE("homescreen-service"," called."); int ret = 0; - auto ip = event_list.find(std::string(event)); - if(ip == event_list.end()) { - event_list[std::string(event)] = 0; - } - if(!subscription) { - ret = afb_req_subscribe(request, my_event); - if(ret == 0) { - subscription = true; + const char *value = afb_req_value(request, _event); + if(value) { + HMI_NOTICE("homescreen-service","subscribe event %s", value); + if(!isSupportEvent(value)) { + HMI_NOTICE("homescreen-service","subscibe event isn't existing."); + ret = AFB_EVENT_BAD_REQUEST; + } + else { + event_list.insert(std::string(value)); + if(!subscription) { + ret = afb_req_subscribe(request, my_event); + if(ret == 0) { + subscription = true; + } + } } } + else { + HMI_NOTICE("homescreen-service","Please input event name"); + ret = AFB_EVENT_BAD_REQUEST; + } return ret; } @@ -156,64 +181,49 @@ int HS_Client::subscribe(afb_req_t request, const char* event) * unsubscribe event * * #### Parameters - * - event: homescreen event, tap_shortcut etc. + * - request : the request * * #### Return - * result + * 0 : success + * others : fail * */ -int HS_Client::unsubscribe(afb_req_t request, const char* event) +int HS_Client::unsubscribe(afb_req_t request) { + HMI_NOTICE("homescreen-service"," called."); int ret = 0; - event_list.erase(std::string(event)); - if(event_list.empty()) { - ret = afb_req_unsubscribe(request, my_event); + const char *value = afb_req_value(request, _event); + if(value) { + HMI_NOTICE("homescreen-service","unsubscribe %s event", value); + event_list.erase(std::string(value)); + if(event_list.empty()) { + ret = afb_req_unsubscribe(request, my_event); + } + } + else { + HMI_NOTICE("homescreen-service","Please input event name"); + ret = AFB_EVENT_BAD_REQUEST; } return ret; } /** - * check if client subscribe event - * - * #### Parameters - * - event: homescreen event, tap_shortcut etc. - * - * #### Return - * true: found - * false: not found - * - */ -bool HS_Client::checkEvent(const char* event) -{ - auto ip = event_list.find(std::string(event)); - if(ip == event_list.end()) - return false; - else - return true; -} - -/** * showWindow event * - * input contents : {"application_id":"the appid that want to display", "parameter":{"area": "display area", ...}} - * * #### Parameters * - request : the request - * - appid : the appid that want to display * * #### Return * 0 : success * others : fail * */ -int HS_Client::showWindow(afb_req_t request, const char* appid) +int HS_Client::showWindow(afb_req_t request) { - if(!checkEvent(__FUNCTION__)) - return 0; - - HMI_NOTICE("homescreen-service","%s application_id = %s.", __FUNCTION__, appid); + HMI_NOTICE("homescreen-service","%s application_id = %s.", __FUNCTION__, my_id.c_str()); + int ret = 0; struct json_object* push_obj = json_object_new_object(); - hs_add_object_to_json_object_str( push_obj, 4, _application_id, appid, _type, __FUNCTION__); + hs_add_object_to_json_object_str( push_obj, 4, _application_id, my_id.c_str(), _type, __FUNCTION__); const char* param = afb_req_value(request, _parameter); if(param) { std::string req_appid = std::move(get_application_id(request)); @@ -225,20 +235,18 @@ int HS_Client::showWindow(afb_req_t request, const char* appid) struct json_object* param_obj = json_tokener_parse(param); json_object_object_add(param_obj, _replyto, json_object_new_string(req_appid.c_str())); json_object_object_add(push_obj, _parameter, param_obj); + afb_event_push(my_event, push_obj); } else { HMI_ERROR("homescreen-service","please input correct parameter."); - return AFB_EVENT_BAD_REQUEST; + ret = AFB_EVENT_BAD_REQUEST; } - afb_event_push(my_event, push_obj); - return 0; + return ret; } /** * hideWindow event * - * input contents : {"application_id":"the appid that want to hide"} - * * #### Parameters * - request : the request * @@ -249,10 +257,7 @@ int HS_Client::showWindow(afb_req_t request, const char* appid) */ int HS_Client::hideWindow(afb_req_t request) { - if(!checkEvent(__FUNCTION__)) - return 0; - - HMI_NOTICE("homescreen-service","%s called.", __FUNCTION__); + HMI_NOTICE("homescreen-service"," called."); std::string req_appid = std::move(get_application_id(request)); if(req_appid.empty()) { HMI_NOTICE("homescreen-service","can't get application identifier"); @@ -260,8 +265,11 @@ int HS_Client::hideWindow(afb_req_t request) } struct json_object* push_obj = json_object_new_object(); - hs_add_object_to_json_object_str( push_obj, 4, _application_id, req_appid.c_str(), + hs_add_object_to_json_object_str( push_obj, 4, _application_id, my_id.c_str(), _type, __FUNCTION__); + struct json_object* param_obj = json_object_new_object(); + json_object_object_add(param_obj, _caller, json_object_new_string(req_appid.c_str())); + json_object_object_add(push_obj, _parameter, param_obj); afb_event_push(my_event, push_obj); return 0; } @@ -269,43 +277,35 @@ int HS_Client::hideWindow(afb_req_t request) /** * replyShowWindow event * - * input contens : {"application_id": "the appid that want to reply", "parameter": {...}} - * * #### Parameters * - request : the request - * - appid : the appid that want to reply * * #### Return * 0 : success * others : fail * */ -int HS_Client::replyShowWindow(afb_req_t request, const char* appid) +int HS_Client::replyShowWindow(afb_req_t request) { - if(!checkEvent(__FUNCTION__)) - return 0; - - HMI_NOTICE("homescreen-service","%s application_id = %s.", __FUNCTION__, appid); + HMI_NOTICE("homescreen-service","%s application_id = %s.", __FUNCTION__, my_id.c_str()); + int ret = 0; struct json_object* push_obj = json_object_new_object(); - hs_add_object_to_json_object_str( push_obj, 4, _application_id, appid, _type, __FUNCTION__); + hs_add_object_to_json_object_str( push_obj, 4, _application_id, my_id.c_str(), _type, __FUNCTION__); const char* param = afb_req_value(request, _parameter); if(param) { json_object_object_add(push_obj, _parameter, json_tokener_parse(param)); + afb_event_push(my_event, push_obj); } else { HMI_ERROR("homescreen-service","please input correct parameter."); - return AFB_EVENT_BAD_REQUEST; + ret = AFB_EVENT_BAD_REQUEST; } - - afb_event_push(my_event, push_obj); - return 0; + return ret; } /** * showNotification event * - * input contents : {"icon": "icon path", "text": "message contents"} - * * #### Parameters * - request : the request * @@ -316,6 +316,7 @@ int HS_Client::replyShowWindow(afb_req_t request, const char* appid) */ int HS_Client::showNotification(afb_req_t request) { + HMI_NOTICE("homescreen-service"," called."); int ret = 0; const char *value = afb_req_value(request, _text); if(value) { @@ -331,8 +332,9 @@ int HS_Client::showNotification(afb_req_t request) if(icon) { json_object_object_add(param_obj, _icon, json_object_new_string(icon)); json_object_object_add(param_obj, _text, json_object_new_string(value)); + json_object_object_add(param_obj, _caller, json_object_new_string(appid.c_str())); struct json_object* push_obj = json_object_new_object(); - hs_add_object_to_json_object_str( push_obj, 4, _application_id, appid.c_str(), _type, __FUNCTION__); + hs_add_object_to_json_object_str( push_obj, 4, _application_id, my_id.c_str(), _type, __FUNCTION__); json_object_object_add(push_obj, _parameter, param_obj); afb_event_push(my_event, push_obj); } @@ -352,8 +354,6 @@ int HS_Client::showNotification(afb_req_t request) /** * showInformation event * - * input contents : {"info": "information contents"} - * * #### Parameters * - request : the request * @@ -364,6 +364,7 @@ int HS_Client::showNotification(afb_req_t request) */ int HS_Client::showInformation(afb_req_t request) { + HMI_NOTICE("homescreen-service"," called."); int ret = 0; const char *value = afb_req_value(request, _info); if(value) { @@ -377,7 +378,7 @@ int HS_Client::showInformation(afb_req_t request) struct json_object* param_obj = json_object_new_object(); json_object_object_add(param_obj, _info, json_object_new_string(value)); struct json_object* push_obj = json_object_new_object(); - hs_add_object_to_json_object_str( push_obj, 4, _application_id, appid.c_str(), _type, __FUNCTION__); + hs_add_object_to_json_object_str( push_obj, 4, _application_id, my_id.c_str(), _type, __FUNCTION__); json_object_object_add(push_obj, _parameter, param_obj); afb_event_push(my_event, push_obj); } @@ -412,4 +413,70 @@ int HS_Client::pushEvent(const char *event, struct json_object *param) json_object_object_add(push_obj, _parameter, param); afb_event_push(my_event, push_obj); return 0; +} +/** + * check if client subscribe event + * + * #### Parameters + * - event: homescreen event, tap_shortcut etc. + * + * #### Return + * true: found + * false: not found + * + */ +bool HS_Client::checkEvent(const char* event) +{ + auto ip = event_list.find(std::string(event)); + if(ip == event_list.end()) + return false; + else + return true; +} + +/** + * check if event is supporting + * + * #### Parameters + * - event: homescreen event, tap_shortcut etc. + * + * #### Return + * true: support + * false: not fosupportund + * + */ +bool HS_Client::isSupportEvent(const char* event) +{ + auto ip = func_list.find(std::string(event)); + if(ip == func_list.end()) + return false; + else + return true; +} + +/** + * handle homescreen event + * + * #### Parameters + * - request : the request + * - verb: request verb name + * + * #### Return + * 0: success + * others: fail + * + */ +int HS_Client::handleRequest(afb_req_t request, const char *verb) +{ + HMI_NOTICE("homescreen-service","called."); + if((strcasecmp(verb, "subscribe") && strcasecmp(verb, "unsubscribe")) && !checkEvent(verb)) + return 0; + + int ret = AFB_EVENT_BAD_REQUEST; + auto ip = func_list.find(std::string(verb)); + if(ip != func_list.end()) { + HMI_NOTICE("homescreen-service","[%s]verb found", verb); + ret = (this->*(ip->second))(request); + } + return ret; }
\ No newline at end of file diff --git a/src/hs-client.h b/src/hs-client.h index 32756b2..791c4cd 100644 --- a/src/hs-client.h +++ b/src/hs-client.h @@ -18,6 +18,7 @@ #define HOMESCREEN_CLIENT_H #include <string> +#include <unordered_set> #include <unordered_map> #include "hs-helper.h" @@ -30,26 +31,42 @@ public: HS_Client &operator=(HS_Client&) = delete; ~HS_Client(); - int tap_shortcut(const char* appid); - int showWindow(afb_req_t request, const char* appid); + int handleRequest(afb_req_t request, const char *verb); + int pushEvent(const char *event, struct json_object *param); + +private: + int tap_shortcut(afb_req_t request); + int on_screen_message (afb_req_t request); + int on_screen_reply (afb_req_t request); + int showWindow(afb_req_t request); int hideWindow(afb_req_t request); - int replyShowWindow(afb_req_t request, const char* appid); - int on_screen_message (afb_req_t request, const char* message); - int on_screen_reply (afb_req_t request, const char* message); - int subscribe(afb_req_t request, const char* event); - int unsubscribe(afb_req_t request, const char* event); + int replyShowWindow(afb_req_t request); + int subscribe(afb_req_t request); + int unsubscribe(afb_req_t request); int showNotification(afb_req_t request); int showInformation(afb_req_t request); - int pushEvent(const char *event, struct json_object *param); -private: + typedef int (HS_Client::*func_handler)(afb_req_t); + const std::unordered_map<std::string, func_handler> func_list { + {"tap_shortcut", &HS_Client::tap_shortcut}, + {"showWindow", &HS_Client::showWindow}, + {"hideWindow", &HS_Client::hideWindow}, + {"replyShowWindow", &HS_Client::replyShowWindow}, + {"on_screen_message", &HS_Client::on_screen_message}, + {"on_screen_reply", &HS_Client::on_screen_reply}, + {"subscribe", &HS_Client::subscribe}, + {"unsubscribe", &HS_Client::unsubscribe}, + {"showNotification", &HS_Client::showNotification}, + {"showInformation", &HS_Client::showInformation} + }; bool checkEvent(const char* event); + bool isSupportEvent(const char* event); private: std::string my_id; afb_event_t my_event; bool subscription = false; - std::unordered_map<std::string, int> event_list; + std::unordered_set<std::string> event_list; }; diff --git a/src/hs-clientmanager.cpp b/src/hs-clientmanager.cpp index 9fe8b96..ce9ad6c 100644 --- a/src/hs-clientmanager.cpp +++ b/src/hs-clientmanager.cpp @@ -154,313 +154,45 @@ void HS_ClientManager::removeClientCtxt(void *data) } /** - * tap_shortcut - * - * #### Parameters - * - request: the request to bindings - * - * #### Return - * result - * - */ -int HS_ClientManager::tap_shortcut(afb_req_t request) -{ - int ret = 0; - const char* value = afb_req_value(request, _application_id); - if (value) { - HMI_NOTICE("homescreen-service","request params = %s.", value); - std::lock_guard<std::mutex> lock(this->mtx); - auto ip = client_list.find(std::string(value)); - if(ip != client_list.end()) { - ip->second->tap_shortcut(value); - } - } - else { - HMI_NOTICE("homescreen-service","Please input application_id"); - ret = AFB_EVENT_BAD_REQUEST; - } - return ret; -} - -/** - * on_screen_message - * - * #### Parameters - * - request: the request to bindings - * - * #### Return - * result - * - */ -int HS_ClientManager::on_screen_message(afb_req_t request) -{ - int ret = 0; - const char* value = afb_req_value(request, _display_message); - if (value) { - HMI_NOTICE("homescreen-service","request params = %s.", value); - std::lock_guard<std::mutex> lock(this->mtx); - for(auto m : client_list) { - m.second->on_screen_message(request, value); - } - } - else { - HMI_NOTICE("homescreen-service","Please input display_message"); - ret = AFB_EVENT_BAD_REQUEST; - } - return ret; -} - -/** - * on_screen_reply - * - * #### Parameters - * - request: the request to bindings - * - * #### Return - * result - * - */ -int HS_ClientManager::on_screen_reply(afb_req_t request) -{ - int ret = 0; - const char* value = afb_req_value(request, _reply_message); - if (value) { - HMI_NOTICE("homescreen-service","request params = %s.", value); - std::lock_guard<std::mutex> lock(this->mtx); - for(auto m : client_list) { - m.second->on_screen_reply(request, value); - } - } - else { - HMI_NOTICE("homescreen-service","Please input reply_message"); - ret = AFB_EVENT_BAD_REQUEST; - } - return ret; -} - -/** - * subscribe - * - * #### Parameters - * - request: the request to bindings - * - * #### Return - * result - * - */ -int HS_ClientManager::subscribe(afb_req_t request) -{ - int ret = 0; - const char *value = afb_req_value(request, "event"); - HMI_NOTICE("homescreen-service","value is %s", value); - if(value) { - std::string appid =std::move(get_application_id(request)); - if(appid.empty()) { - HMI_NOTICE("homescreen-service","can't get application identifier"); - return AFB_REQ_GETAPPLICATIONID_ERROR; - } - - std::lock_guard<std::mutex> lock(this->mtx); - HS_Client* client = nullptr; - auto ip = client_list.find(appid); - if(ip != client_list.end()) { - client = client_list[appid]; - } - else { - appid2ctxt[appid] = createClientCtxt(request, appid); - client = addClient(request, appid); - } - - if(client->subscribe(request, value) != 0) { - HMI_NOTICE("homescreen-service","subscribe failed"); - ret = AFB_REQ_SUBSCRIBE_ERROR; - } - } - else { - HMI_NOTICE("homescreen-service","Please input event name"); - ret = AFB_EVENT_BAD_REQUEST; - } - return ret; -} - -/** - * unsubscribe - * - * #### Parameters - * - request: the request to bindings - * - * #### Return - * result - * - */ -int HS_ClientManager::unsubscribe(afb_req_t request) -{ - const char *value = afb_req_value(request, "event"); - HMI_NOTICE("homescreen-service","value is %s", value); - int ret = 0; - if(value) { - std::string appid = std::move(get_application_id(request)); - if(appid.empty()) { - HMI_NOTICE("homescreen-service","can't get application identifier"); - return AFB_REQ_GETAPPLICATIONID_ERROR; - } - - std::lock_guard<std::mutex> lock(this->mtx); - auto ip = client_list.find(appid); - if(ip != client_list.end() - && ip->second->unsubscribe(request, value) != 0) { - HMI_NOTICE("homescreen-service","unsubscribe failed"); - ret = AFB_REQ_UNSUBSCRIBE_ERROR; - } - } - else { - HMI_NOTICE("homescreen-service","Please input event name"); - ret = AFB_EVENT_BAD_REQUEST; - } - return ret; -} - -/** - * showWindow event + * handle homescreen request * * #### Parameters * - request : the request + * - verb : the verb name + * - appid : to which application * * #### Return * 0 : success * others : fail * */ -int HS_ClientManager::showWindow(afb_req_t request) +int HS_ClientManager::handleRequest(afb_req_t request, const char *verb, const char *appid) { + HMI_NOTICE("homescreen-service","verb=[%s],appid=[%s].", verb, appid); int ret = 0; - const char* value = afb_req_value(request, _application_id); - if (value) { - HMI_NOTICE("homescreen-service","request params = %s.", value); - std::lock_guard<std::mutex> lock(this->mtx); - auto ip = client_list.find(std::string(value)); - if(ip != client_list.end()) { - ret = ip->second->showWindow(request, value); + std::lock_guard<std::mutex> lock(this->mtx); + if(appid == nullptr) { + for(auto m : client_list) { + m.second->handleRequest(request, verb); } } else { - HMI_NOTICE("homescreen-service","Please input application_id"); - ret = AFB_EVENT_BAD_REQUEST; - } - return ret; -} - -/** - * hideWindow event - * - * #### Parameters - * - request : the request - * - * #### Return - * 0 : success - * others : fail - * - */ -int HS_ClientManager::hideWindow(afb_req_t request) -{ - int ret = 0; - const char* value = afb_req_value(request, _application_id); - if (value) { - HMI_NOTICE("homescreen-service","request params = %s.", value); - std::lock_guard<std::mutex> lock(this->mtx); - auto ip = client_list.find(std::string(value)); + auto ip = client_list.find(std::string(appid)); if(ip != client_list.end()) { - ret = ip->second->hideWindow(request); + ret = ip->second->handleRequest(request, verb); } - } - else { - HMI_NOTICE("homescreen-service","Please input application_id"); - ret = AFB_EVENT_BAD_REQUEST; - } - return ret; -} - -/** - * replyShowWindow event - * - * #### Parameters - * - request : the request - * - * #### Return - * 0 : success - * others : fail - * - */ -int HS_ClientManager::replyShowWindow(afb_req_t request) -{ - int ret = 0; - const char* value = afb_req_value(request, _application_id); - if (value) { - HMI_NOTICE("homescreen-service","request params = %s.", value); - std::lock_guard<std::mutex> lock(this->mtx); - auto ip = client_list.find(std::string(value)); - if(ip != client_list.end()) { - ret = ip->second->replyShowWindow(request, value); + else { + if(!strcasecmp(verb, "subscribe")) { + appid2ctxt[appid] = createClientCtxt(request, appid); + HS_Client* client = addClient(request, appid); + ret = client->handleRequest(request, "subscribe"); + } + else { + HMI_NOTICE("homescreen-service","not exist session"); + ret = AFB_EVENT_BAD_REQUEST; + } } } - else { - HMI_NOTICE("homescreen-service","Please input application_id"); - ret = AFB_EVENT_BAD_REQUEST; - } - return ret; -} - -/** - * showNotification event - * - * #### Parameters - * - request : the request - * - * #### Return - * 0 : success - * others : fail - * - */ -int HS_ClientManager::showNotification(afb_req_t request) -{ - int ret = 0; - std::lock_guard<std::mutex> lock(this->mtx); - auto ip = client_list.find(_homescreen); - if(ip != client_list.end()) { - ret = ip->second->showNotification(request); - } - else { - HMI_NOTICE("homescreen-service","not exist sessiion with homescreen"); - ret = AFB_REQ_SHOWNOTIFICATION_ERROR; - } - - return ret; -} - -/** - * showInformation event - * - * #### Parameters - * - request : the request - * - * #### Return - * 0 : success - * others : fail - * - */ -int HS_ClientManager::showInformation(afb_req_t request) -{ - int ret = 0; - std::lock_guard<std::mutex> lock(this->mtx); - auto ip = client_list.find(_homescreen); - if(ip != client_list.end()) { - ret = ip->second->showInformation(request); - } - else { - HMI_NOTICE("homescreen-service","not exist sessiion with homescreen"); - ret = AFB_REQ_SHOWINFORMATION_ERROR; - } - return ret; } @@ -499,4 +231,4 @@ int HS_ClientManager::pushEvent(const char *event, struct json_object *param, st } return 0; -} +}
\ No newline at end of file diff --git a/src/hs-clientmanager.h b/src/hs-clientmanager.h index a568298..efc36de 100644 --- a/src/hs-clientmanager.h +++ b/src/hs-clientmanager.h @@ -45,19 +45,9 @@ public: static HS_ClientManager* instance(void); int init(void); - void removeClientCtxt(void *data); - - int tap_shortcut(afb_req_t request); - int showWindow(afb_req_t request); - int hideWindow(afb_req_t request); - int replyShowWindow(afb_req_t request); - int on_screen_message(afb_req_t request); - int on_screen_reply(afb_req_t request); - int subscribe(afb_req_t request); - int unsubscribe(afb_req_t request); - int showNotification(afb_req_t request); - int showInformation(afb_req_t request); + int handleRequest(afb_req_t request, const char *verb, const char *appid = nullptr); int pushEvent(const char *event, struct json_object *param, std::string appid = ""); + void removeClientCtxt(void *data); // don't use, internal only private: HS_ClientCtxt* createClientCtxt(afb_req_t req, std::string appid); diff --git a/src/hs-periphery.cpp b/src/hs-periphery.cpp index a629ead..06e95ea 100644 --- a/src/hs-periphery.cpp +++ b/src/hs-periphery.cpp @@ -38,7 +38,15 @@ HS_PeripheryManager* HS_PeripheryManager::me = nullptr; */ int HS_PeripheryManager::init(afb_api_t api) { - return m_restriction.init(api); + HS_Restriction* restriction = new HS_Restriction(); + int ret = restriction->init(api); + if(ret) { + HMI_ERROR("homescreen-service","restriction init failed."); + } + else { + periphery_list[std::string("restriction")] = restriction; + } + return ret; } /** @@ -72,7 +80,8 @@ HS_PeripheryManager* HS_PeripheryManager::instance(void) */ void HS_PeripheryManager::onEvent(afb_api_t api, const char *event, struct json_object *object) { - m_restriction.onEvent(api, event, object); + for(auto m : periphery_list) + m.second->onEvent(api, event, object); } /* -------------------------------------HS_Restriction------------------------------------------ */ diff --git a/src/hs-periphery.h b/src/hs-periphery.h index f551db3..d2da39e 100644 --- a/src/hs-periphery.h +++ b/src/hs-periphery.h @@ -17,9 +17,16 @@ #define HOMESCREEN_PERIPHERY_H #include <unordered_set> +#include <unordered_map> #include "hs-helper.h" -class HS_Restriction { +class HS_Periphery { +public: + virtual int init(afb_api_t api) = 0; + virtual void onEvent(afb_api_t api, const char *event, struct json_object *object) = 0; +}; + +class HS_Restriction : public HS_Periphery { public: HS_Restriction() = default; ~HS_Restriction() = default; @@ -64,7 +71,8 @@ private: }; static HS_PeripheryManager* me; - HS_Restriction m_restriction; + std::unordered_map<std::string, HS_Periphery*> periphery_list; + // HS_Restriction m_restriction; }; #endif // HOMESCREEN_PERIPHERY_H
\ No newline at end of file |