summaryrefslogtreecommitdiffstats
path: root/src/hs-clientmanager.cpp
diff options
context:
space:
mode:
authorwang_zhiqiang <wang_zhiqiang@dl.cn.nexty-ele.com>2018-10-30 19:12:18 +0800
committerwang_zhiqiang <wang_zhiqiang@dl.cn.nexty-ele.com>2018-10-30 19:12:18 +0800
commitd58138e0ceb19b3f201ec5e6e7126015db2cfead (patch)
tree837dae23643724e2d0c5ca28b1d9720411b7bf44 /src/hs-clientmanager.cpp
parent789ecb879cc529400b290eb9750fd1f9298fc690 (diff)
Improve HS_ClientManager and fix issue
1.No longer operate HS_Client in homescreen.cpp,move to HS_ClientManager class. 2.In hs_client.cpp,afb_event_push return the count of clients that received the event, not push event result, in tap_shortcut/on_screen_message/on_screen_reply directly return zero. Bug-AGL: SPEC-1764 Change-Id: Ief17d3fe3a9c80937fbda05d1c158eeed3924a75 Signed-off-by: wang_zhiqiang <wang_zhiqiang@dl.cn.nexty-ele.com>
Diffstat (limited to 'src/hs-clientmanager.cpp')
-rw-r--r--src/hs-clientmanager.cpp233
1 files changed, 165 insertions, 68 deletions
diff --git a/src/hs-clientmanager.cpp b/src/hs-clientmanager.cpp
index a79e9bb..aae8c42 100644
--- a/src/hs-clientmanager.cpp
+++ b/src/hs-clientmanager.cpp
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
+#include <algorithm>
#include "hs-clientmanager.h"
#include "hmi-debug.h"
@@ -69,73 +69,6 @@ HS_ClientManager* HS_ClientManager::instance(void)
int HS_ClientManager::init(void)
{
HMI_NOTICE("homescreen-service","called.");
- // TODO : connect to windowmanger
- // get applist from appfw
-}
-
-/**
- * find HS_Client in client_list
- *
- * #### Parameters
- * - appid: app's id
- *
- * #### Return
- * found HS_Client pointer
- *
- */
-HS_Client* HS_ClientManager::find(std::string appid)
-{
- std::lock_guard<std::mutex> lock(this->mtx);
- HS_Client* p = nullptr;
- auto ip = client_list.find(appid);
- if(ip != client_list.end()) {
- p = client_list[appid];
- }
- return p;
-}
-
-/**
- * get HS_Client
- *
- * #### Parameters
- * - appid: app's id
- *
- * #### Return
- * found HS_Client pointer
- *
- */
-HS_Client* HS_ClientManager::getClient(afb_req_t req, std::string appid)
-{
- std::lock_guard<std::mutex> lock(this->mtx);
- HS_Client* p = nullptr;
- auto ip = client_list.find(appid);
- if(ip != client_list.end()) {
- p = client_list[appid];
- }
- else {
- appid2ctxt[appid] = createClientCtxt(req, appid);
- p = addClient(req, appid);
- }
- return p;
-}
-
-/**
- * get HS_Client pointers set
- *
- * #### Parameters
- * - Nothing
- *
- * #### Return
- * HS_Client pointers set
- *
- */
-std::vector<HS_Client*> HS_ClientManager::getAllClient(void)
-{
- std::lock_guard<std::mutex> lock(this->mtx);
- std::vector<HS_Client*> v;
- for(auto a : client_list)
- v.push_back(a.second);
- return v;
}
/**
@@ -217,3 +150,167 @@ void HS_ClientManager::removeClientCtxt(void *data)
delete appid2ctxt[ctxt->id];
appid2ctxt.erase(ctxt->id);
}
+
+/**
+ * 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;
+}