+
+/**
+ * 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_name);
+ if (value) {
+ HMI_NOTICE("homescreen-service","request params = %s.", value);
+ // first step get appid from appname, next step change appname to appid
+ std::string appid(value);
+ std::transform(appid.begin(), appid.end(), appid.begin(), ::tolower);
+ std::lock_guard<std::mutex> lock(this->mtx);
+ auto ip = client_list.find(appid);
+ if(ip != client_list.end()) {
+ ip->second->tap_shortcut(value);
+ }
+ }
+ else {
+ HMI_NOTICE("homescreen-service","Please input application_name");
+ 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(afb_req_get_application_id(request));
+ std::transform(appid.begin(), appid.end(), appid.begin(), ::tolower);
+ 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(afb_req_get_application_id(request));
+ std::transform(appid.begin(), appid.end(), appid.begin(), ::tolower);
+ 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;
+}