瀏覽代碼

Z991239-1017 #comment fea 添加errNotify处理

陈良瑜80374463 4 年之前
父節點
當前提交
8c468ebaba

+ 10 - 3
Module/mod_chromium/CModTools.cpp

@@ -117,7 +117,7 @@ std::pair<bool, std::string> CModTools::getErrUrl()
 	return std::make_pair(true, errPagePath.GetData());
 }
 
-std::pair<bool, std::string> CModTools::GenerateErrPage(ERR_PAGE_REASON errType)
+std::pair<bool, std::string> CModTools::GenerateErrPage(ERR_PAGE_REASON errType, std::string exReason, std::string exMsg, std::string exRebootTime)
 {
 	auto errUrlRet = getErrUrl();
 	CSimpleStringA errPagePath = errUrlRet.second.c_str(), strChromiumPath = GetCefHead(this->m_pEntity).Append(CEFCLIENT_NAME);
@@ -149,6 +149,13 @@ std::pair<bool, std::string> CModTools::GenerateErrPage(ERR_PAGE_REASON errType)
 	case ERR_PAGE_REASON::TerminalManagerOff:
 	case ERR_PAGE_REASON::jobuncomplete:
 		errPagePath.Append(CSimpleStringA("?reason=") + errType._to_string());
+		errPagePath = CSimpleStringA("\'file:///") + errPagePath + CSimpleStringA("\'");
+		break;
+	case ERR_PAGE_REASON::ErrNotify:
+		errPagePath.Append(CSimpleStringA("?reason=")).Append(exReason.c_str()).Append("&errmsg=").Append(exMsg.c_str());
+		if (exRebootTime.length() > 5)
+			errPagePath.Append("&reboottime=").Append(exRebootTime.c_str());
+		errPagePath = CSimpleStringA("\'file:///") + errPagePath + CSimpleStringA("\'");
 		break;
 	default:
 		return std::make_pair(false, std::string("unknown err_page_reason:").append(errType._to_string()));
@@ -353,7 +360,7 @@ void CModTools::openAdPage() {
 }
 
 
-std::pair<ErrorCodeEnum, int> CModTools::StartChromiumBrowser(ERR_PAGE_REASON reason){
+std::pair<ErrorCodeEnum, int> CModTools::StartChromiumBrowser(ERR_PAGE_REASON reason, std::string exReason, std::string exMsg, std::string exRebootTime){
 
 	g_mutexFreerdp.lock();
 	std::shared_ptr<void> delHandleFun((void*)0, [&](void*) {
@@ -384,7 +391,7 @@ std::pair<ErrorCodeEnum, int> CModTools::StartChromiumBrowser(ERR_PAGE_REASON re
 	else
 	{
 		//open err page
-		auto errPageUrl = GenerateErrPage(reason);
+		auto errPageUrl = GenerateErrPage(reason, exReason, exMsg, exRebootTime);
 		
 		if (!errPageUrl.first)
 		{

+ 4 - 3
Module/mod_chromium/CModTools.h

@@ -15,10 +15,11 @@ using boost::serialization::singleton;
 #define CEFCLIENT_NAME		"cefclient"
 #endif
 
+
 namespace Chromium{
 
 	BETTER_ENUM(ERR_PAGE_REASON, int, CameraConfig,	CardStoreIsBusy, MachineTypeError, TerminalManagerKickOut,
-		TerminalManagerOff,	breakdown, disabled, jobuncomplete,	normal)
+		TerminalManagerOff,	breakdown, disabled, jobuncomplete, ErrNotify, normal)
 
 	BETTER_ENUM(PAGE_TYPE, int,	CameraConfig, TerminalManager, errPage,	Ad,	slv, init, TradeManager)
 
@@ -32,7 +33,7 @@ private:
 	CEntityBase* m_pEntity;
 public:
 	void InitCModTools(CEntityBase* pEntity);
-	std::pair<ErrorCodeEnum, int> StartChromiumBrowser(ERR_PAGE_REASON reason = ERR_PAGE_REASON::normal);
+	std::pair<ErrorCodeEnum, int> StartChromiumBrowser(ERR_PAGE_REASON reason = ERR_PAGE_REASON::normal, std::string exReason = "", std::string exMsg = "", std::string exRebootTime = "");
 	bool killAllChromium();	//通过taskkill 关闭掉所有的cefclient
 	bool killChromiumByName(std::string name);
 	void RestartProxyServer();
@@ -49,7 +50,7 @@ private:
 	std::pair<ErrorCodeEnum, int> openCef(std::string cmdline, bool isGuard = false);
 	void cefClientGuardian(std::string cmdline);
 	void openAdPage();
-	std::pair<bool, std::string> GenerateErrPage(ERR_PAGE_REASON errType);
+	std::pair<bool, std::string> GenerateErrPage(ERR_PAGE_REASON errType, std::string exReason, std::string exMsg, std::string exRebootTime);
 	std::string GetSpShellBootTime();
 	bool isOutsidePad();
 	void setLimitReason(const char* reason);

+ 31 - 11
Module/mod_chromium/mod_chromium.cpp

@@ -122,10 +122,14 @@ namespace Chromium {
 		GetFunction()->GetSystemStaticInfo(m_sysInfo);
 
 		ErrorCodeEnum Error;
-		Error = GetFunction()->StartTcpBridgeServer(m_iTcpBridgePort);
+		if (Error_Succeed != (Error = GetFunction()->StartTcpBridgeServer(m_iTcpBridgePort)))
+		{
+			LOG_TRACE("start tcp bridge server failed!");
+			pTransactionContext->SendAnswer(Error);
+			return;
+		}
 #if (defined _WIN32 || defined _WIN64)
-		Error = GetFunction()->SubscribeBroadcast("IEBrowser", "CustomerCmd", this, m_uidBrowserListenser);
-		if (Error != Error_Succeed) {
+		if (Error_Succeed != (Error = GetFunction()->SubscribeBroadcast("IEBrowser", "CustomerCmd", this, m_uidBrowserListenser))) {
 			LOG_TRACE("subscribe browser CustomerCmd failed!");
 			pTransactionContext->SendAnswer(Error);
 		}
@@ -133,12 +137,7 @@ namespace Chromium {
 			LOG_TRACE("subscribe browser CustomerCmd success!");
 #endif
 
-		if (Error != Error_Succeed)
-		{
-			LOG_TRACE("start tcp bridge server failed!");
-			pTransactionContext->SendAnswer(Error);
-			return;
-		}
+
 		const int ArgsCount = strArgs.GetCount();
 		LOG_TRACE("strArgs.GetCount() = %d", ArgsCount);
         for (int i = 0; i < ArgsCount; ++i) {
@@ -178,7 +177,10 @@ namespace Chromium {
 			LOG_TRACE("subscribe AccessAuthorization log failed!"); 
 		else
 			LOG_TRACE("subscribe AccessAuthorization success!");
-		GetFunction()->SubscribeLog(m_uuidAccessAuthErr, this, Log_Error, Severity_None, Error_IgnoreAll, -1, "AccessAuthorization");
+		//GetFunction()->SubscribeLog(m_uuidAccessAuthErr, this, Log_Error, Severity_None, Error_IgnoreAll, -1, "AccessAuthorization");
+
+		if(Error_Succeed == GetFunction()->SubscribeLog(m_uuidAllFault, this, Log_Notify, Severity_High, Error_IgnoreAll, -2, NULL, false))
+			this->GetFunction()->GetPrivilegeFunction()->RefreshFrameworkState(FrameworkState_NotDisturb);
 
 		GetFunction()->RegistSysVarEvent("UIState", this);
 
@@ -255,7 +257,25 @@ namespace Chromium {
 		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)
 	{
-		Dbg("OnLog %x", dwUserCode);
+		Dbg("OnLog %x from entity %s, msg : %s", dwUserCode, NULL == pszEntityName ? "" : pszEntityName, NULL == pszMessage ? "" : pszMessage);
+		if (Log_Notify == eLogType)
+		{
+			try {
+				cJSON* pJson = cJSON_Parse(pszMessage);
+				auto notifyReason = cJSON_GetObjectItem(pJson, "reason")->valuestring;
+				auto notifymsg = cJSON_GetObjectItem(pJson, "errmsg")->valuestring;
+				auto notiryRebootTime = cJSON_GetObjectItem(pJson, "rebootTime")->valuestring;
+				auto openRet = CModTools::get_mutable_instance().StartChromiumBrowser(ERR_PAGE_REASON::ErrNotify, notifyReason, notifymsg, notiryRebootTime);
+				Dbg("Log_Notify err, open page, %d", openRet.first);
+			}
+			catch(std::exception &e){
+				Dbg("Log_Notify err, %s", e.what());
+			}
+			return;
+		}
+			
+
+
 		switch (dwUserCode)
 		{
 		case LOG_EVT_BEGIN_CAMERA_CONFIG://no use

+ 1 - 1
Module/mod_chromium/mod_chromium.h

@@ -73,7 +73,7 @@ namespace Chromium {
 		CSimpleStringA m_strCustomMainUrl;
 	private:
 		//subscribe
-		CUUID m_uidCameraListener, m_uuidAccessAuth, m_uidBrowserListenser, m_uuidAccessAuthErr;
+		CUUID m_uidCameraListener, m_uuidAccessAuth, m_uidBrowserListenser, m_uuidAccessAuthErr, m_uuidAllFault;
 		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);