Browse Source

Z991239-1017 #comment fea 添加errNotify处理

陈良瑜80374463 4 years ago
parent
commit
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());
 	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();
 	auto errUrlRet = getErrUrl();
 	CSimpleStringA errPagePath = errUrlRet.second.c_str(), strChromiumPath = GetCefHead(this->m_pEntity).Append(CEFCLIENT_NAME);
 	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::TerminalManagerOff:
 	case ERR_PAGE_REASON::jobuncomplete:
 	case ERR_PAGE_REASON::jobuncomplete:
 		errPagePath.Append(CSimpleStringA("?reason=") + errType._to_string());
 		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;
 		break;
 	default:
 	default:
 		return std::make_pair(false, std::string("unknown err_page_reason:").append(errType._to_string()));
 		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();
 	g_mutexFreerdp.lock();
 	std::shared_ptr<void> delHandleFun((void*)0, [&](void*) {
 	std::shared_ptr<void> delHandleFun((void*)0, [&](void*) {
@@ -384,7 +391,7 @@ std::pair<ErrorCodeEnum, int> CModTools::StartChromiumBrowser(ERR_PAGE_REASON re
 	else
 	else
 	{
 	{
 		//open err page
 		//open err page
-		auto errPageUrl = GenerateErrPage(reason);
+		auto errPageUrl = GenerateErrPage(reason, exReason, exMsg, exRebootTime);
 		
 		
 		if (!errPageUrl.first)
 		if (!errPageUrl.first)
 		{
 		{

+ 4 - 3
Module/mod_chromium/CModTools.h

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

+ 31 - 11
Module/mod_chromium/mod_chromium.cpp

@@ -122,10 +122,14 @@ namespace Chromium {
 		GetFunction()->GetSystemStaticInfo(m_sysInfo);
 		GetFunction()->GetSystemStaticInfo(m_sysInfo);
 
 
 		ErrorCodeEnum Error;
 		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)
 #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!");
 			LOG_TRACE("subscribe browser CustomerCmd failed!");
 			pTransactionContext->SendAnswer(Error);
 			pTransactionContext->SendAnswer(Error);
 		}
 		}
@@ -133,12 +137,7 @@ namespace Chromium {
 			LOG_TRACE("subscribe browser CustomerCmd success!");
 			LOG_TRACE("subscribe browser CustomerCmd success!");
 #endif
 #endif
 
 
-		if (Error != Error_Succeed)
-		{
-			LOG_TRACE("start tcp bridge server failed!");
-			pTransactionContext->SendAnswer(Error);
-			return;
-		}
+
 		const int ArgsCount = strArgs.GetCount();
 		const int ArgsCount = strArgs.GetCount();
 		LOG_TRACE("strArgs.GetCount() = %d", ArgsCount);
 		LOG_TRACE("strArgs.GetCount() = %d", ArgsCount);
         for (int i = 0; i < ArgsCount; ++i) {
         for (int i = 0; i < ArgsCount; ++i) {
@@ -178,7 +177,10 @@ namespace Chromium {
 			LOG_TRACE("subscribe AccessAuthorization log failed!"); 
 			LOG_TRACE("subscribe AccessAuthorization log failed!"); 
 		else
 		else
 			LOG_TRACE("subscribe AccessAuthorization success!");
 			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);
 		GetFunction()->RegistSysVarEvent("UIState", this);
 
 
@@ -255,7 +257,25 @@ namespace Chromium {
 		const DWORD dwSysError, const DWORD dwUserCode, const DWORD dwEntityInstanceID, const WORD wEntityDevelID,
 		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 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)
 		switch (dwUserCode)
 		{
 		{
 		case LOG_EVT_BEGIN_CAMERA_CONFIG://no use
 		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;
 		CSimpleStringA m_strCustomMainUrl;
 	private:
 	private:
 		//subscribe
 		//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,
 		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 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 CAutoArray<DWORD>& Param, const char* pszEntityName, const char* pszModuleName, const char* pszMessage);