#ifndef _CHROMIUM_ENTITY_H #define _CHROMIUM_ENTITY_H #include "Chromium_server_g.h" #include "CWebsocketServer.h" #include #include #include #if (defined _WIN32 || defined _WIN64) #include "job.h" #else #include "modVer.h" #endif #include "guitask/enum.h" #include "../mod_healthmanager/HealthManager_msg_g.h" #include "../mod_ResourceWatcher/ResourceWatcher_msg_g.h" #include "Chromium_server_g.h" #include //#define TEST_FUNCTION //ns::msg 在gcc下拼接有点问题,暂时不得不重新定义一个 #define SP_MSG_HANDLE_NS_EX(ns, msg, ns_msg, OnMsg) \ case eMsg_##msg: \ if (eMsgSig_##msg == dwMessageSignature) { \ ns_msg t; \ ErrorCodeEnum Error = SpBuffer2Object(Buffer, t); \ if (Error == Error_Succeed) \ OnMsg(pszEntityName, dwMessageId, dwMessageSignature, t); \ } else { \ LOG_TRACE("%s signature mismatched!", #msg); \ } \ break; #pragma once namespace Chromium { #define BROWSER_TIMER_ID 0xF002 #define BROWSER_TIMER_INTERVAL 3600000 class CChromiumEntity; class ChromiumSession : public ChromiumSrv_ServerSessionBase { public: ChromiumSession(CChromiumEntity* pEntity) :m_pEntity(pEntity) {} virtual ~ChromiumSession() {} virtual void Handle_OpenBrowser(SpReqAnsContext::Pointer ctx); virtual void Handle_CloseBrowser(SpReqAnsContext::Pointer ctx); virtual void Handle_OpenCommonPage(SpReqAnsContext::Pointer ctx); virtual void Handle_CloseCommonPage(SpReqAnsContext::Pointer ctx); private: CChromiumEntity* m_pEntity; }; class CChromiumEntity : public CEntityBase, public ILogListener, public IBroadcastListener, public ISysVarListener { public: CChromiumEntity(); virtual ~CChromiumEntity(); virtual const char* GetEntityName() const { return "Chromium"; } #if (defined _WIN32 || defined _WIN64) #else const char* GetEntityVersion() const { return MODULE_VERSION_FULL; } #endif virtual bool IsService()const { return true; } virtual CServerSessionBase* OnNewSession(const char* /*pszRemoteEntityName*/, const char* /*pszParam*/) { return new ChromiumSession(this); } void OpenBrowser(SpReqAnsContext::Pointer ctx); void CloseBrowser(SpReqAnsContext::Pointer ctx); void OpenCommonPage(SpReqAnsContext::Pointer ctx); void CloseCommonPage(SpReqAnsContext::Pointer ctx); virtual void OnPaused(); virtual void OnPreStart(CAutoArray strArgs, CSmartPointer pTransactionContext); virtual void OnPreClose(EntityCloseCauseEnum eCloseCause, CSmartPointer pTransactionContext); //void CefClintNotify(); void exitClean(); void FetchCustomMainUrl(CAutoArray& strArgs); bool HasCustomMainUrl() const { return ConfigManager::getInstance().m_strCustomMainUrl.length() > 0; } const char* GetCustomMainUrl() const { return ConfigManager::getInstance().m_strCustomMainUrl.c_str(); } bool HasCustomAdUrl() const { return ConfigManager::getInstance().m_strCustomAdUrl.length() > 0; } const char* GetCustomAdUrl() const { return ConfigManager::getInstance().m_strCustomAdUrl.c_str(); } bool IsConfigMode() { return ConfigManager::getInstance().m_installMode; } private: void OnTaskTimerListener(void* pData); #if (defined _WIN32 || defined _WIN64) void JobNotify(); #endif void OnBrowserCacheClean(const char* pszEntityName, DWORD dwMessageId, DWORD dwMessageSignature, ResourceWatcher::BrowserCacheClean& evt); void generateCefclientTimer(); void openMainPage(); void openAdPage(); void openExtendPage(); void openInstallPage(); void openStartupPage(); void openPerformanceMonitorPage(); void startWithCfg(); bool CheckIsCardStore(); private: CWebsocketServer* m_pWsServer; ITimerListener* m_pTimerListener, * pBusinessLimitTimerListener;//浏览器监控Timer,业务禁用Timer HANDLE m_hIOCP; HANDLE m_hThreadIOCP; boost::mutex m_eventContorl, m_eventConditionMu; //sysvarEvent变化时阻塞修改 boost::mutex m_commonPageLock;// boost::condition_variable_any m_eventCondition;//满足有数据时激活线程 CAutoArray m_strArgs; CSmartPointer m_pTransactionContext; public: boost::timed_mutex m_firstStartMain;//首次启动主页 int getBrowserStartTimes(); private: //subscribe CUUID m_uidCameraListener, m_uuidAccessAuth, m_uuidResourceWatch,m_uidBrowserListenser, m_uuidAccessAuthErr, m_uuidAllFault, m_uuidVTMLoader; virtual void OnLog(const CAutoArray& SubIDs, const CUUID nLogID, const LogTypeEnum eLogType, const SeverityLevelEnum eLevel, const DWORD dwSysError, const DWORD dwUserCode, const DWORD dwEntityInstanceID, const WORD wEntityDevelID, const CAutoArray& Param, const char* pszEntityName, const char* pszModuleName, const char* pszMessage, const linkContext& pLinkInfo); virtual void OnSysVarEvent(const char* pszKey, const char* pszValue, const char* pszOldValue, const char* pszEntityName); void DoWithSysVarEvent(); void DoWithErrMsgListUpdate(); void DoWithTerminalStage_toA(); void DoWithTerminalStage_toX(); void DoWithTerminalStage_toOther(std::string terminalStageVal); void checkUrlStartTime(); void DoBrowserCacheClearJob(); void OnPreStart_Init(CAutoArray& strArgs, CSmartPointer& pTransactionContext); bool OnPreStart_socketStart(CAutoArray& strArgs, CSmartPointer& pTransactionContext); bool OnPreStart_register(CAutoArray& strArgs, CSmartPointer& pTransactionContext); bool OnPreStart_openWeb(); void startupPageClean(); #ifdef TEST_FUNCTION public: void testLogError(); #endif SP_BEGIN_MSG_DISPATCH_MAP(CChromiumEntity) SP_BEGIN_ENTITY_MSG("ResourceWatcher") SP_MSG_HANDLE_NS_EX(ResourceWatcher, BrowserCacheClean, ResourceWatcher::BrowserCacheClean, OnBrowserCacheClean) SP_END_ENTITY_MSG() //SP_BEGIN_ENTITY_MSG("HealthManager") //SP_MSG_HANDLE_NS(HealthManager, TradeManage, OnTradeManage) //SP_MSG_HANDLE_NS_EX(HealthManager, TerminalManager, HealthManager::TerminalManager, OnTerminalManage) //SP_END_ENTITY_MSG() SP_END_MSG_DISPATCH_MAP() }; } #endif