Browse Source

#IQRV #comment [Chromium] 通过openweb的方式,重新打开关闭的页面

陈良瑜80374463 3 năm trước cách đây
mục cha
commit
c1d2334464

+ 1 - 1
Module/mod_ResourceWatcher/mod_ResourceWatcher.cpp

@@ -1635,7 +1635,6 @@ void ResourceWatcherEntity::OnSysVarEvent(const char* pszKey, const char* pszVal
 
 }
 
-}
 
 std::string ResourceWatcherEntity::DoCheckCertainProcessStatus(const CAutoArray<CSimpleStringA>& pName)
 {
@@ -1706,6 +1705,7 @@ std::string ResourceWatcherEntity::DoCheckCertainProcessStatus(const CAutoArray<
     }
 
     return uploadInfo;
+}
 void ResourceWatcherEntity::FilesClean(SpReqAnsContext<ResourceWatcherService_FilesClean_Req, ResourceWatcherService_FilesClean_Ans>::Pointer ctx)
 {
     ErrorCodeEnum result(Error_Succeed);

+ 4 - 4
Module/mod_chromium/CModTools.cpp

@@ -99,7 +99,7 @@ namespace Chromium {
 		m_UserMgrUrlNoSidebarMutiStr = std::get<2>(configRet);
 		m_UserMgrUrlFultureStr = std::get<3>(configRet);
 		m_UserMgrAdStr = std::get<4>(configRet);
-		notifyExist = breakdownExist = false;
+		notifyExist = breakdownExist = m_isAdOpen = false;
 		m_magicStr = uuid4_generate(8);
 		m_withMin = false;
 #if (defined _WIN32 || defined _WIN64)
@@ -136,6 +136,7 @@ namespace Chromium {
             child_process.wait();
         } while (false);
 
+		breakdownExist = m_isAdOpen = notifyExist = false;
 		DbgEx("run killAllChromium success ex");
 		return true;
 #endif
@@ -712,8 +713,7 @@ namespace Chromium {
 	}
 
 	std::pair<bool, std::string> CModTools::openAdPage() {
-		static bool adOpen = false;
-		if (adOpen)//only open ad in first time
+		if (m_isAdOpen)//only open ad in first time
 			return std::make_pair(false, "open AdPage failed! Already exist.");
 
 		auto AdUrlRet = getAdUrl();
@@ -725,7 +725,7 @@ namespace Chromium {
 				return std::make_pair(false, "open Ad err!");
 			else
 			{
-				adOpen = true;
+				m_isAdOpen = true;
 				return std::make_pair(true, "");
 			}
 

+ 1 - 1
Module/mod_chromium/CModTools.h

@@ -99,7 +99,7 @@ namespace Chromium {
 
 		bool findRestartCode(DWORD userCode);//if true, restart the terminal
 		DWORD spiltErrMsg(std::string errMsg);//split the errmsg to usercode
-		bool notifyExist, breakdownExist;	//if notify exist, do not start other err page
+		bool notifyExist, breakdownExist, m_isAdOpen;	//if notify exist, do not start other err page
 	private:
 		CSimpleString m_strSite, m_strMachineType;
 		CSimpleString m_UserMgrUrlStr, m_UserMgrUrlNoSidebarStr, m_UserMgrUrlNoSidebarMutiStr, m_UserMgrUrlFultureStr, m_UserMgrAdStr;

+ 26 - 3
Module/mod_chromium/mod_chromium.cpp

@@ -23,6 +23,7 @@
 #include "../mod_upload/Upload_client_g.h"
 #include <tuple>
 #include <string>
+#include <algorithm>
 #include "EventCode.h"	
 #ifdef OPEN_PERF
 #include <gperftools/profiler.h>
@@ -380,7 +381,7 @@ namespace Chromium {
 		return true;
 }
 
-	bool CChromiumEntity::OnPreStart_openWeb(CAutoArray<CSimpleStringA>& strArgs, CSmartPointer<ITransactionContext>& pTransactionContext)
+	bool CChromiumEntity::OnPreStart_openWeb()
 	{
 		//generateBussinessLimitTimer();
 #if (defined _WIN32 || defined _WIN64)
@@ -459,7 +460,7 @@ namespace Chromium {
 			if (!OnPreStart_register(strArgs, pTransactionContext)) {
 				return;
 			}
-			if (!OnPreStart_openWeb(strArgs, pTransactionContext)) {
+			if (!OnPreStart_openWeb()) {
 				return;
 			}
 		}
@@ -742,16 +743,38 @@ namespace Chromium {
 			DbgEx("OnBrowserCacheClean get cache path err, %d", error);
 			return;
 		}
+#if (defined _WIN32 || defined _WIN64)
 		CModTools::get_mutable_instance().lockGuard();
 		CModTools::get_mutable_instance().StopChromiumBrowser(ERR_PAGE_REASON::breakdown, true);//close all tab
 		auto tmpDirArr = find_files(tmpCacheDir.GetData(), "cefCache*", true);
 
-		for(auto it = tmpDirArr.begin(); it != tmpDirArr.end(); it++)
+		for (auto it = tmpDirArr.begin(); it != tmpDirArr.end(); it++)
 			LogWarn(Severity_Low, Error_Debug, LOG_EVT_CHROMIUM_BROWSER_CACHE_CLEAER, CSimpleStringA::Format("clear chromium browser cache %s %s", it->c_str(),
 				RemoveDirRecursive(it->c_str()) ? "success" : "fail"));
 
 		CModTools::get_mutable_instance().unlockGuard();
+#else
+		//uos 由于无guard,需要重启整个chromium实体
+		CModTools::get_mutable_instance().killAllChromium();
+		auto tmpDirArr = find_files(tmpCacheDir.GetData(), "cefCache*", true);
+		auto uosTmpDirArr = find_files(tmpCacheDir.GetData(), "UOSBrowser*", true);
+		std::for_each(uosTmpDirArr.begin(), uosTmpDirArr.end(), [&](std::string tmp) {
+			tmpDirArr.push_back(tmp);
+			});//insert uosTmpDirArr into tmpDirArr
+
+		for (auto it = tmpDirArr.begin(); it != tmpDirArr.end(); it++)
+			LogWarn(Severity_Low, Error_Debug, LOG_EVT_CHROMIUM_BROWSER_CACHE_CLEAER, CSimpleStringA::Format("clear chromium browser cache %s %s", it->c_str(),
+				RemoveDirRecursive(it->c_str()) ? "success" : "fail"));
+
+		if (m_pTimerListener != NULL)
+		{
+			GetFunction()->KillTimer(CHROMIUM_TIMER_ID);
+			delete m_pTimerListener;
+			m_pTimerListener = NULL;
+		}
+		OnPreStart_openWeb();//重新调用open web
 
+#endif 
 	}
 	void CChromiumEntity::generateCefclientTimer()
 	{

+ 5 - 2
Module/mod_chromium/mod_chromium.h

@@ -19,6 +19,8 @@
 #include "Chromium_server_g.h"
 #include <boost/thread/mutex.hpp>
 
+
+//ns::msg 在gcc下拼接有点问题,暂时不得不重新定义一个
 #define SP_MSG_HANDLE_NS_EX(ns, msg, ns_msg, OnMsg) \
 	case eMsg_##msg: \
 				if (eMsgSig_##msg == dwMessageSignature) { \
@@ -153,7 +155,7 @@ namespace Chromium {
 		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(CAutoArray<CSimpleStringA>& strArgs, CSmartPointer<ITransactionContext>& pTransactionContext);
+		bool OnPreStart_openWeb();
 		SP_BEGIN_MSG_DISPATCH_MAP(CChromiumEntity)
 #if (defined _WIN32 || defined _WIN64)
 			SP_BEGIN_ENTITY_MSG("IEBrowser")
@@ -161,8 +163,9 @@ namespace Chromium {
 			SP_END_ENTITY_MSG()
 
 #endif
+
 			SP_BEGIN_ENTITY_MSG("ResourceWatcher")
-			//SP_MSG_HANDLE_NS(ResourceWatcher, BrowserCacheClean, OnBrowserCacheClean)
+			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)