X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fhomescreen.cpp;h=3e4ff8f00354883b918a1343b29701188a27d5f9;hb=0fc1fc7db6ff7cb95ad6cd6f0ef8f2b88f3d08da;hp=7b8e653039a8fa9d3449a1d599b8e6bf9a4d7884;hpb=54c9e53f5f9cfbc9f8cf1ea4af9b81447c3a9ffc;p=apps%2Fagl-service-homescreen.git diff --git a/src/homescreen.cpp b/src/homescreen.cpp index 7b8e653..3e4ff8f 100644 --- a/src/homescreen.cpp +++ b/src/homescreen.cpp @@ -25,6 +25,7 @@ #include "hs-clientmanager.h" #include "hs-appinfo.h" #include "hs-config.h" +#include const char _error[] = "error"; @@ -34,16 +35,77 @@ const char _reply_message[] = "reply_message"; const char _keyData[] = "data"; const char _keyId[] = "id"; +struct hs_handshake { + hs_handshake(int times, int sleep) : m_times(times), m_sleep(sleep) {} + void start(afb_api_t api) const; + + enum HandshakeStatus { + Handshake_Idle = 0, + Handshake_Subscribing, + Handshake_Subscribe_Fail, + Handshake_WaitEvent, + Handshake_Over + }; + static int hs_sts; + +private: + const std::string sub_event = "windowmanager/handshake"; + const int m_times; + const int m_sleep; +}; + +int hs_handshake::hs_sts = hs_handshake::Handshake_Idle; + +void handshake_subscribe_callback(struct json_object *obj, const char *error, const char *info) +{ + if(error == nullptr) { + hs_handshake::hs_sts = hs_handshake::Handshake_WaitEvent; + } + else { + hs_handshake::hs_sts = hs_handshake::Handshake_Subscribe_Fail; + } +} + +int on_handshake_event(afb_api_t api, const char *event, struct json_object *object) +{ + hs_handshake::hs_sts = hs_handshake::Handshake_Over; + return 1; +} + +void hs_handshake::start(afb_api_t api) const +{ + setEventHook(sub_event.c_str(), on_handshake_event); + int count = 0; + do { + // try to subscribe handshake event + if(hs_handshake::hs_sts == hs_handshake::Handshake_Idle + || hs_handshake::hs_sts == hs_handshake::Handshake_Subscribe_Fail) { + hs_handshake::hs_sts = Handshake_Subscribing; + HS_WmProxy *wm_proxy = new HS_WmProxy(); + wm_proxy->subscribe(api, HS_WmProxy::Event_Handshake, handshake_subscribe_callback); + } + + // wait handshake event + if(hs_handshake::hs_sts == hs_handshake::Handshake_Over) { + break; + } + + ++count; + usleep(m_sleep*1000); + } while(count < m_times); + AFB_WARNING("wait count is %d.", count); +} + struct hs_instance { - HS_ClientManager *client_manager; // the connection session manager - HS_AppInfo *app_info; // application info + HS_ClientManager *client_manager; // the connection session manager + HS_AppInfo *app_info; // application info - hs_instance() : client_manager(HS_ClientManager::instance()), app_info(HS_AppInfo::instance()) {} - int init(afb_api_t api); - void setEventHook(const char *event, const event_hook_func f); - void onEvent(afb_api_t api, const char *event, struct json_object *object); + hs_instance() : client_manager(HS_ClientManager::instance()), app_info(HS_AppInfo::instance()) {} + int init(afb_api_t api); + void setEventHook(const char *event, const event_hook_func f); + void onEvent(afb_api_t api, const char *event, struct json_object *object); private: - std::unordered_map> event_hook_list; + std::unordered_map> event_hook_list; }; /** @@ -77,7 +139,12 @@ int hs_instance::init(afb_api_t api) return -1; } - // handshake + // const struct handshake_info *h = hs_config.getHandshakeInfo(); + // struct hs_handshake handshake(h->times, h->sleep); + // handshake.start(api); + + // recover application + return 0; }