123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218 |
- #ifndef _CHROMIUM_ENTITY_H
- #define _CHROMIUM_ENTITY_H
- #include "Chromium_server_g.h"
- #include "CWebsocketServer.h"
- #include<map>
- #include<string>
- #include<tuple>
- #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 <boost/thread/mutex.hpp>
- //#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
- struct SYS_EVENT_PARAM
- {
- std::string key;
- std::string value;
- std::string oldValue;
- std::string entityName;
- // 默认构造函数
- SYS_EVENT_PARAM() = default;
- // 带参数的构造函数
- SYS_EVENT_PARAM(const std::string& k, const std::string& v, const std::string& ov, const std::string& en)
- : key(k), value(v), oldValue(ov), entityName(en) {}
- // 拷贝构造函数
- SYS_EVENT_PARAM(const SYS_EVENT_PARAM& other)
- : key(other.key), value(other.value), oldValue(other.oldValue), entityName(other.entityName) {}
- // 拷贝赋值运算符
- SYS_EVENT_PARAM& operator=(const SYS_EVENT_PARAM& other) {
- if (this != &other) {
- key = other.key;
- value = other.value;
- oldValue = other.oldValue;
- entityName = other.entityName;
- }
- return *this;
- }
- // 禁用移动构造函数
- SYS_EVENT_PARAM(SYS_EVENT_PARAM&&) = delete;
- // 禁用移动赋值运算符
- SYS_EVENT_PARAM& operator=(SYS_EVENT_PARAM&&) = delete;
- };
- class CChromiumEntity;
- class ChromiumSession : public ChromiumSrv_ServerSessionBase
- {
- public:
- ChromiumSession(CChromiumEntity* pEntity) :m_pEntity(pEntity) {}
- virtual ~ChromiumSession() {}
- virtual void Handle_OpenBrowser(SpReqAnsContext<ChromiumSrv_OpenBrowser_Req, ChromiumSrv_OpenBrowser_Ans>::Pointer ctx);
- virtual void Handle_CloseBrowser(SpReqAnsContext<ChromiumSrv_CloseBrowser_Req, ChromiumSrv_CloseBrowser_Ans>::Pointer ctx);
- virtual void Handle_OpenCommonPage(SpReqAnsContext<ChromiumSrv_OpenCommonPage_Req, ChromiumSrv_OpenCommonPage_Ans>::Pointer ctx);
- virtual void Handle_CloseCommonPage(SpReqAnsContext<ChromiumSrv_CloseCommonPage_Req, ChromiumSrv_CloseCommonPage_Ans>::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<ChromiumSrv_OpenBrowser_Req, ChromiumSrv_OpenBrowser_Ans>::Pointer ctx);
- void CloseBrowser(SpReqAnsContext<ChromiumSrv_CloseBrowser_Req, ChromiumSrv_CloseBrowser_Ans>::Pointer ctx);
- void OpenCommonPage(SpReqAnsContext<ChromiumSrv_OpenCommonPage_Req, ChromiumSrv_OpenCommonPage_Ans>::Pointer ctx);
- void CloseCommonPage(SpReqAnsContext<ChromiumSrv_CloseCommonPage_Req, ChromiumSrv_CloseCommonPage_Ans>::Pointer ctx);
- virtual void OnPaused();
- virtual void OnPreStart(CAutoArray<CSimpleStringA> strArgs, CSmartPointer<ITransactionContext> pTransactionContext);
- virtual void OnPreClose(EntityCloseCauseEnum eCloseCause, CSmartPointer<ITransactionContext> pTransactionContext);
- //void CefClintNotify();
- void exitClean();
- void FetchCustomMainUrl(CAutoArray<CSimpleStringA>& strArgs);
- bool HasCustomMainUrl() const { return !m_strCustomMainUrl.IsNullOrEmpty(); }
- const char* GetCustomMainUrl() const { return m_strCustomMainUrl; }
- bool HasCustomAdUrl() const { return !m_strCustomAdUrl.IsNullOrEmpty(); }
- const char* GetCustomAdUrl() const { return m_strCustomAdUrl; }
- bool IsConfigMode()
- {
- return 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:
- CSystemStaticInfo m_sysInfo;
- CWebsocketServer* m_pWsServer;
- ITimerListener* m_pTimerListener, * pBusinessLimitTimerListener;//浏览器监控Timer,业务禁用Timer
- int m_iTcpBridgePort;
- HANDLE m_hIOCP;
- HANDLE m_hThreadIOCP;
- CSimpleStringA m_strCustomMainUrl, m_strCustomAdUrl;
- bool m_runAd/*广告*/, m_runMain/*业务*/, m_runExtend/*低柜副屏*/, m_runLogin/*用户桌面,可能木有用*/, m_withBrowser/*是否需要与browser交互*/;
- bool m_withDebugMode/*是否启动debug模式*/, m_withMagic/*启用随机共享内存*/, m_withNoFileLog/*是否不需要本地日志落盘*/, m_withMedia/*开启多媒体选项*/;
- bool m_withUnsafeAd/*Ad页面忽略安全选项*/;
- bool m_withConsole;
- bool m_withSpecialTest/*开启一些终端功能的测试*/, m_withLinkLog/*开启链路中的中间链路日志*/;
- bool m_withMin, m_withClose, m_installMode;
- std::deque<SYS_EVENT_PARAM> m_eventArr;
- //boost::container::deque<SYS_EVENT_PARAM> m_eventArr;
- boost::mutex m_eventContorl, m_eventConditionMu; //sysvarEvent变化时阻塞修改
- boost::mutex m_commonPageLock;//
- boost::condition_variable_any m_eventCondition;//满足有数据时激活线程
- CAutoArray<CSimpleStringA> m_strArgs;
- CSmartPointer<ITransactionContext> m_pTransactionContext;
- bool m_noStartupPage;
-
- #ifdef RVC_OS_LINUX
- std::map<std::string, std::vector<int>> m_commonPageArr;
- #endif
- 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<CUUID>& SubIDs, const CUUID nLogID, const LogTypeEnum eLogType, const SeverityLevelEnum eLevel,
- const DWORD dwSysError, const DWORD dwUserCode, const DWORD dwEntityInstanceID, const WORD wEntityDevelID,
- const CAutoArray<DWORD>& 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 checkUrlStartTime();
- void DoBrowserCacheClearJob();
- void OnPreStart_Init(CAutoArray<CSimpleStringA>& strArgs, CSmartPointer<ITransactionContext>& pTransactionContext);
- bool OnPreStart_socketStart(CAutoArray<CSimpleStringA>& strArgs, CSmartPointer<ITransactionContext>& pTransactionContext);
- bool OnPreStart_register(CAutoArray<CSimpleStringA>& strArgs, CSmartPointer<ITransactionContext>& 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
|