X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fhs-client.cpp;fp=src%2Fhs-client.cpp;h=dd91e103a104eeed7e7fb3abd561e97851fa86c1;hb=53ae85dc62875fc92f1d24e25359beda8787826d;hp=e97f8440423cf3ca87d9933c6967b5dfa7475627;hpb=83cc1aeb7dcb0ce030a24f9aa079bb15bc2ef60a;p=apps%2Fagl-service-homescreen.git diff --git a/src/hs-client.cpp b/src/hs-client.cpp index e97f844..dd91e10 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); } @@ -388,3 +389,70 @@ int HS_Client::showInformation(afb_req_t 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; +} + +/** + * 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