mod_chromium.h 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. #ifndef _CHROMIUM_ENTITY_H
  2. #define _CHROMIUM_ENTITY_H
  3. #include "Chromium_server_g.h"
  4. #include "CWebsocketServer.h"
  5. #include<map>
  6. #include<string>
  7. #include<tuple>
  8. #if (defined _WIN32 || defined _WIN64)
  9. #include "job.h"
  10. #else
  11. #include "modVer.h"
  12. #endif
  13. #include "guitask/enum.h"
  14. #include "../mod_healthmanager/HealthManager_msg_g.h"
  15. #include "../mod_ResourceWatcher/ResourceWatcher_msg_g.h"
  16. #include "Chromium_server_g.h"
  17. #include <boost/thread/mutex.hpp>
  18. #include <boost/container/deque.hpp> //不知为什么,vs2010中std::deque没有函数提示
  19. //#define TEST_FUNCTION
  20. //ns::msg 在gcc下拼接有点问题,暂时不得不重新定义一个
  21. #define SP_MSG_HANDLE_NS_EX(ns, msg, ns_msg, OnMsg) \
  22. case eMsg_##msg: \
  23. if (eMsgSig_##msg == dwMessageSignature) { \
  24. ns_msg t; \
  25. ErrorCodeEnum Error = SpBuffer2Object(Buffer, t); \
  26. if (Error == Error_Succeed) \
  27. OnMsg(pszEntityName, dwMessageId, dwMessageSignature, t); \
  28. } else { \
  29. LOG_TRACE("%s signature mismatched!", #msg); \
  30. } \
  31. break;
  32. #pragma once
  33. namespace Chromium {
  34. #define BROWSER_TIMER_ID 0xF002
  35. #define BROWSER_TIMER_INTERVAL 3600000
  36. typedef struct {
  37. std::string key;
  38. std::string value;
  39. std::string oldValue;
  40. std::string entityName;
  41. }SYS_EVENT_PARAM;
  42. class CChromiumEntity;
  43. class ChromiumSession : public ChromiumSrv_ServerSessionBase
  44. {
  45. public:
  46. ChromiumSession(CChromiumEntity* pEntity) :m_pEntity(pEntity) {}
  47. virtual ~ChromiumSession() {}
  48. virtual void Handle_OpenBrowser(SpReqAnsContext<ChromiumSrv_OpenBrowser_Req, ChromiumSrv_OpenBrowser_Ans>::Pointer ctx);
  49. virtual void Handle_CloseBrowser(SpReqAnsContext<ChromiumSrv_CloseBrowser_Req, ChromiumSrv_CloseBrowser_Ans>::Pointer ctx);
  50. virtual void Handle_OpenCommonPage(SpReqAnsContext<ChromiumSrv_OpenCommonPage_Req, ChromiumSrv_OpenCommonPage_Ans>::Pointer ctx);
  51. virtual void Handle_CloseCommonPage(SpReqAnsContext<ChromiumSrv_CloseCommonPage_Req, ChromiumSrv_CloseCommonPage_Ans>::Pointer ctx);
  52. private:
  53. CChromiumEntity* m_pEntity;
  54. };
  55. class CChromiumEntity : public CEntityBase, public ILogListener, public IBroadcastListener, public ISysVarListener
  56. {
  57. public:
  58. CChromiumEntity();
  59. virtual ~CChromiumEntity();
  60. virtual const char* GetEntityName() const { return "Chromium"; }
  61. #if (defined _WIN32 || defined _WIN64)
  62. #else
  63. const char* GetEntityVersion() const { return MODULE_VERSION_FULL; }
  64. #endif
  65. virtual bool IsService()const { return true; }
  66. virtual CServerSessionBase* OnNewSession(const char* /*pszRemoteEntityName*/, const char* /*pszParam*/)
  67. {
  68. return new ChromiumSession(this);
  69. }
  70. void OpenBrowser(SpReqAnsContext<ChromiumSrv_OpenBrowser_Req, ChromiumSrv_OpenBrowser_Ans>::Pointer ctx);
  71. void CloseBrowser(SpReqAnsContext<ChromiumSrv_CloseBrowser_Req, ChromiumSrv_CloseBrowser_Ans>::Pointer ctx);
  72. void OpenCommonPage(SpReqAnsContext<ChromiumSrv_OpenCommonPage_Req, ChromiumSrv_OpenCommonPage_Ans>::Pointer ctx);
  73. void CloseCommonPage(SpReqAnsContext<ChromiumSrv_CloseCommonPage_Req, ChromiumSrv_CloseCommonPage_Ans>::Pointer ctx);
  74. virtual void OnPaused();
  75. virtual void OnPreStart(CAutoArray<CSimpleStringA> strArgs, CSmartPointer<ITransactionContext> pTransactionContext);
  76. virtual void OnPreClose(EntityCloseCauseEnum eCloseCause, CSmartPointer<ITransactionContext> pTransactionContext);
  77. //void CefClintNotify();
  78. void exitClean();
  79. void FetchCustomMainUrl(CAutoArray<CSimpleStringA>& strArgs);
  80. bool HasCustomMainUrl() const { return !m_strCustomMainUrl.IsNullOrEmpty(); }
  81. const char* GetCustomMainUrl() const { return m_strCustomMainUrl; }
  82. bool HasCustomAdUrl() const { return !m_strCustomAdUrl.IsNullOrEmpty(); }
  83. const char* GetCustomAdUrl() const { return m_strCustomAdUrl; }
  84. bool IsConfigMode()
  85. {
  86. return m_installMode;
  87. }
  88. private:
  89. void OnTaskTimerListener(void* pData);
  90. #if (defined _WIN32 || defined _WIN64)
  91. void JobNotify();
  92. #endif
  93. void OnBrowserCacheClean(const char* pszEntityName, DWORD dwMessageId, DWORD dwMessageSignature, ResourceWatcher::BrowserCacheClean& evt);
  94. void generateCefclientTimer();
  95. void openMainPage();
  96. void openAdPage();
  97. void openExtendPage();
  98. void openInstallPage();
  99. void openStartupPage();
  100. void openPerformanceMonitorPage();
  101. void startWithCfg();
  102. bool CheckIsCardStore();
  103. private:
  104. CSystemStaticInfo m_sysInfo;
  105. CWebsocketServer* m_pWsServer;
  106. ITimerListener* m_pTimerListener, * pBusinessLimitTimerListener;//浏览器监控Timer,业务禁用Timer
  107. int m_iTcpBridgePort;
  108. HANDLE m_hIOCP;
  109. HANDLE m_hThreadIOCP;
  110. CSimpleStringA m_strCustomMainUrl, m_strCustomAdUrl;
  111. bool m_runAd/*广告*/, m_runMain/*业务*/, m_runExtend/*低柜副屏*/, m_runLogin/*用户桌面,可能木有用*/, m_withBrowser/*是否需要与browser交互*/;
  112. bool m_withDebugMode/*是否启动debug模式*/, m_withMagic/*启用随机共享内存*/, m_withNoFileLog/*是否不需要本地日志落盘*/, m_withMedia/*开启多媒体选项*/;
  113. bool m_withUnsafeAd/*Ad页面忽略安全选项*/;
  114. bool m_withConsole;
  115. bool m_withSpecialTest/*开启一些终端功能的测试*/, m_withLinkLog/*开启链路中的中间链路日志*/;
  116. bool m_withMin, m_withClose, m_installMode;
  117. boost::container::deque<SYS_EVENT_PARAM> m_eventArr;
  118. boost::mutex m_eventContorl, m_eventConditionMu; //sysvarEvent变化时阻塞修改
  119. boost::mutex m_commonPageLock;//
  120. boost::condition_variable_any m_eventCondition;//满足有数据时激活线程
  121. CAutoArray<CSimpleStringA> m_strArgs;
  122. CSmartPointer<ITransactionContext> m_pTransactionContext;
  123. #ifdef RVC_OS_LINUX
  124. std::map<std::string, std::vector<int>> m_commonPageArr;
  125. #endif
  126. public:
  127. boost::timed_mutex m_firstStartMain;//首次启动主页
  128. int getBrowserStartTimes();
  129. private:
  130. //subscribe
  131. CUUID m_uidCameraListener, m_uuidAccessAuth, m_uuidResourceWatch,m_uidBrowserListenser, m_uuidAccessAuthErr, m_uuidAllFault, m_uuidVTMLoader;
  132. virtual void OnLog(const CAutoArray<CUUID>& SubIDs, const CUUID nLogID, const LogTypeEnum eLogType, const SeverityLevelEnum eLevel,
  133. const DWORD dwSysError, const DWORD dwUserCode, const DWORD dwEntityInstanceID, const WORD wEntityDevelID,
  134. const CAutoArray<DWORD>& Param, const char* pszEntityName, const char* pszModuleName, const char* pszMessage, const linkContext& pLinkInfo);
  135. virtual void OnSysVarEvent(const char* pszKey, const char* pszValue, const char* pszOldValue, const char* pszEntityName);
  136. void DoWithSysVarEvent();
  137. void checkUrlStartTime();
  138. void DoBrowserCacheClearJob();
  139. void OnPreStart_Init(CAutoArray<CSimpleStringA>& strArgs, CSmartPointer<ITransactionContext>& pTransactionContext);
  140. bool OnPreStart_socketStart(CAutoArray<CSimpleStringA>& strArgs, CSmartPointer<ITransactionContext>& pTransactionContext);
  141. bool OnPreStart_register(CAutoArray<CSimpleStringA>& strArgs, CSmartPointer<ITransactionContext>& pTransactionContext);
  142. bool OnPreStart_openWeb();
  143. #ifdef TEST_FUNCTION
  144. public:
  145. void testLogError();
  146. #endif
  147. SP_BEGIN_MSG_DISPATCH_MAP(CChromiumEntity)
  148. SP_BEGIN_ENTITY_MSG("ResourceWatcher")
  149. SP_MSG_HANDLE_NS_EX(ResourceWatcher, BrowserCacheClean, ResourceWatcher::BrowserCacheClean, OnBrowserCacheClean)
  150. SP_END_ENTITY_MSG()
  151. //SP_BEGIN_ENTITY_MSG("HealthManager")
  152. //SP_MSG_HANDLE_NS(HealthManager, TradeManage, OnTradeManage)
  153. //SP_MSG_HANDLE_NS_EX(HealthManager, TerminalManager, HealthManager::TerminalManager, OnTerminalManage)
  154. //SP_END_ENTITY_MSG()
  155. SP_END_MSG_DISPATCH_MAP()
  156. };
  157. }
  158. #endif