X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fhs-clientmanager.h;h=4cb1fadfc1add0d4deae8c1ee4581d872f57f310;hb=690bef15acbffe7245b8a0b15ee4372f1ccea5d3;hp=64ca03cdda30fc712b38f44fcb63ca191b1d63a7;hpb=7a123d6d802fe76a6d2eb32adacb2215d5bb873a;p=apps%2Fagl-service-homescreen.git diff --git a/src/hs-clientmanager.h b/src/hs-clientmanager.h index 64ca03c..4cb1fad 100644 --- a/src/hs-clientmanager.h +++ b/src/hs-clientmanager.h @@ -21,9 +21,32 @@ #include #include #include +#include +#include #include "hs-helper.h" #include "hs-client.h" +extern const std::string _listen_all; + +class listener_interface { +public: + listener_interface(std::string uid, std::set listen_appid = std::set()) : m_uid(uid), m_listen_appid(listen_appid) {} + virtual ~listener_interface() {} + virtual void notify(afb_api_t api, std::string appid = "") = 0; + std::string myUid(void) {return m_uid;} + std::set listenAppSet(void) {return m_listen_appid;} + void addListenAppId(std::string appid) {m_listen_appid.insert(appid);} + bool isListenAppId(std::string &appid) { + auto it = m_listen_appid.find(appid); + return it != m_listen_appid.end() ? true : false; + } + bool listenAppEmpty(void) {return m_listen_appid.empty();} + void clearListenAppSet(void) {m_listen_appid.clear();} +private: + std::string m_uid; + std::set m_listen_appid; +}; + typedef struct HS_ClientCtxt { std::string id; @@ -45,29 +68,28 @@ 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); + int pushEvent(const char *event, struct json_object *param, std::string appid = ""); + void removeClientCtxt(void *data); // don't use, internal only + void setStartupAppidAndArea(const std::pair pair) {startup_appid = pair.first;startup_area = pair.second;} + bool isAppStarted(const std::string &appid); + void addListener(listener_interface* listener); + void removeListener(listener_interface* listener); private: HS_ClientCtxt* createClientCtxt(afb_req_t req, std::string appid); HS_Client* addClient(afb_req_t req, std::string appid); void removeClient(std::string appid); + bool checkRegisterApp(afb_api_t api, const std::string &appid); + void notifyListener(afb_api_t api, const std::string &appid); private: static HS_ClientManager* me; + std::unordered_map> listener_list; std::unordered_map client_list; std::unordered_map appid2ctxt; std::mutex mtx; + std::string startup_appid, startup_area; }; #endif // HOMESCREEN_CLIENTMANAGER_H \ No newline at end of file