aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwang_zhiqiang <wang_zhiqiang@dl.cn.nexty-ele.com>2019-01-16 10:54:43 +0800
committerwang_zhiqiang <wang_zhiqiang@dl.cn.nexty-ele.com>2019-02-21 10:10:06 +0800
commitca1bb49a4f349d011e17b1bcf75cc7529182dec6 (patch)
tree0a10e507312172b2ab37802d4fe33c592de87501
parent5eae0207c498ad2233c595b25fb905c7779112b4 (diff)
Improve homescreen-service
1.Improve class cohesion and reduce public interface number 2.Unified event pattern BUG-AGL: SPEC-2120 Change-Id: I4c5066be2deaf2b809af66cb5a8acdc5bffa5a23 Signed-off-by: wang_zhiqiang <wang_zhiqiang@dl.cn.nexty-ele.com>
-rw-r--r--src/homescreen.cpp232
-rw-r--r--src/hs-client.cpp296
-rw-r--r--src/hs-client.h24
-rw-r--r--src/hs-clientmanager.cpp312
-rw-r--r--src/hs-clientmanager.h14
5 files changed, 359 insertions, 519 deletions
diff --git a/src/homescreen.cpp b/src/homescreen.cpp
index fce25ee..e921feb 100644
--- a/src/homescreen.cpp
+++ b/src/homescreen.cpp
@@ -58,17 +58,25 @@ static void pingSample(afb_req_t request)
static void tap_shortcut (afb_req_t request)
{
HMI_NOTICE("homescreen-service","called.");
- int ret = g_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_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]");
+ }
}
/**
@@ -85,18 +93,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_client_manager->on_screen_message(request);
- if (ret != 0) {
- afb_req_fail_f(request, "failed", "called %s, Unknown parameter", __FUNCTION__);
- return;
+ int ret = g_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]");
}
/**
@@ -113,18 +119,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_client_manager->on_screen_reply(request);
- if (ret != 0) {
- afb_req_fail_f(request, "failed", "called %s, Unknown parameter", __FUNCTION__);
- return;
+ int ret = g_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]");
}
/**
@@ -140,18 +144,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_client_manager->handleRequest(request, __FUNCTION__, req_appid.c_str());
+ }
+ else {
+ ret = AFB_EVENT_BAD_REQUEST;
+ }
- int ret = g_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.");
}
/**
@@ -167,18 +177,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_client_manager->handleRequest(request, __FUNCTION__, req_appid.c_str());
+ }
+ else {
+ ret = AFB_EVENT_BAD_REQUEST;
+ }
- int ret = g_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.");
}
/**
@@ -194,18 +210,24 @@ static void unsubscribe(afb_req_t request)
static void showWindow(afb_req_t request)
{
HMI_NOTICE("homescreen-service","called.");
-
- int ret = g_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_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]");
+ }
}
/**
@@ -221,18 +243,24 @@ static void showWindow(afb_req_t request)
static void hideWindow(afb_req_t request)
{
HMI_NOTICE("homescreen-service","called.");
-
- int ret = g_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_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]");
+ }
}
/**
@@ -248,18 +276,24 @@ static void hideWindow(afb_req_t request)
static void replyShowWindow(afb_req_t request)
{
HMI_NOTICE("homescreen-service","called.");
-
- int ret = g_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_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]");
+ }
}
/**
@@ -277,18 +311,16 @@ static void replyShowWindow(afb_req_t request)
static void showNotification(afb_req_t request)
{
HMI_NOTICE("homescreen-service","called.");
-
- int ret = g_client_manager->showNotification(request);
- if (ret != 0) {
- afb_req_fail_f(request, "failed", "called %s, Unknown parameter", __FUNCTION__);
- return;
+ int ret = g_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]");
}
/**
@@ -306,18 +338,16 @@ static void showNotification(afb_req_t request)
static void showInformation(afb_req_t request)
{
HMI_NOTICE("homescreen-service","called.");
-
- int ret = g_client_manager->showInformation(request);
- if (ret != 0) {
- afb_req_fail_f(request, "failed", "called %s, Unknown parameter", __FUNCTION__);
- return;
+ int ret = g_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 e97f844..f508f3d 100644
--- a/src/hs-client.cpp
+++ b/src/hs-client.cpp
@@ -18,12 +18,28 @@
#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";
+
+// homescreen-service event and event handler function list
+const std::unordered_map<std::string, HS_Client::func_handler> HS_Client::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}
+};
/**
* HS_Client construction function
@@ -61,20 +77,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 +98,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 +195,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 +249,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 +271,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 +279,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 +291,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 +330,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 +346,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 +368,6 @@ int HS_Client::showNotification(afb_req_t request)
/**
* showInformation event
*
- * input contents : {"info": "information contents"}
- *
* #### Parameters
* - request : the request
*
@@ -364,6 +378,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 +392,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 +403,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
diff --git a/src/hs-client.h b/src/hs-client.h
index b06a717..ac4d004 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,25 +31,30 @@ 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);
+
+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);
-private:
+ typedef int (HS_Client::*func_handler)(afb_req_t);
+ static const std::unordered_map<std::string, func_handler> func_list;
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 1355c99..7d658e4 100644
--- a/src/hs-clientmanager.cpp
+++ b/src/hs-clientmanager.cpp
@@ -154,312 +154,44 @@ 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;
-}
+} \ No newline at end of file
diff --git a/src/hs-clientmanager.h b/src/hs-clientmanager.h
index 64ca03c..d485ea8 100644
--- a/src/hs-clientmanager.h
+++ b/src/hs-clientmanager.h
@@ -45,18 +45,8 @@ 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);
+ void removeClientCtxt(void *data); // don't use, internal only
private:
HS_ClientCtxt* createClientCtxt(afb_req_t req, std::string appid);