Browse Source

#IQRV #comment [Chromium] 支持通过健康实体调用起配置页面

gifur 4 years ago
parent
commit
24600246e7

+ 9 - 0
Module/mod_chromium/CModTools.cpp

@@ -436,6 +436,15 @@ std::pair<ErrorCodeEnum, int> CModTools::StartChromiumBrowser(
 		if (Error_Succeed == openCefRet.first) {
 			return std::make_pair(Error_Succeed, openCefRet.second);
 		}
+	} else if (reason._to_integral() == ERR_PAGE_REASON::OutsideRequest) {
+
+        auto strCmdLine = generateCefclientCmd(false, std::get<0>(normalParam));
+        auto openCefRet = openCef(strCmdLine, true);
+        if (Error_Succeed == openCefRet.first) {
+            return std::make_pair(Error_Succeed, openCefRet.second);
+		} else {
+			Dbg("open cef for OutsideRequest failed: %s", SpStrError(openCefRet.first));
+		}
 	}
 	else
 	{

+ 2 - 2
Module/mod_chromium/CModTools.h

@@ -18,10 +18,10 @@ using boost::serialization::singleton;
 
 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, ErrNotify, Normal, OutsideRequest)
 
-	BETTER_ENUM(PAGE_TYPE, int,	CameraConfig, TerminalManager, errPage,	Ad,	slv, init, TradeManager, breakdown)
+	BETTER_ENUM(PAGE_TYPE, int,	Deploy, CameraConfig, TerminalManager, errPage,	Ad,	slv, init, TradeManager, breakdown)
 
 	BETTER_ENUM(TradeManageCodeEnum, int, Undefined, Trade,	JobUncomplete, Disabled)
 

+ 12 - 4
Module/mod_chromium/mod_chromium.cpp

@@ -41,8 +41,7 @@
 
 namespace Chromium {
 
-	void ChromiumSession::Handle_OpenBrowser(
-		SpReqAnsContext<ChromiumSrv_OpenBrowser_Req, ChromiumSrv_OpenBrowser_Ans>::Pointer ctx)
+	void ChromiumSession::Handle_OpenBrowser(SpReqAnsContext<ChromiumSrv_OpenBrowser_Req, ChromiumSrv_OpenBrowser_Ans>::Pointer ctx)
 	{
 		LOG_FUNCTION();
 		m_pEntity->OpenBrowser(ctx);
@@ -129,10 +128,19 @@ namespace Chromium {
 	}
 #endif
 
-    void CChromiumEntity::OpenBrowser(
-		SpReqAnsContext<ChromiumSrv_OpenBrowser_Req, ChromiumSrv_OpenBrowser_Ans>::Pointer ctx)
+    void CChromiumEntity::OpenBrowser(SpReqAnsContext<ChromiumSrv_OpenBrowser_Req, ChromiumSrv_OpenBrowser_Ans>::Pointer ctx)
     {
+		CSimpleStringA strUrl = ctx->Req.mainUrl;
+		CSimpleStringA strUrl2 = ctx->Req.viceUrl;
+		if (strUrl.IsNullOrEmpty()) {
+			ctx->Answer(Error_Param);
+			return;
+		}
+        auto ret = CModTools::get_mutable_instance().StartChromiumBrowser(ERR_PAGE_REASON::OutsideRequest, { strUrl.GetData(), strUrl2.GetData() });
+		ErrorCodeEnum result = ret.first;
+        Dbg("open request browser page %s return %s", (LPCTSTR)strUrl, SpStrError(result));
 
+		ctx->Answer(result);
 	}
 
     void CChromiumEntity::OnPaused()

+ 1 - 0
Module/mod_healthmanager/CMakeLists.txt

@@ -32,6 +32,7 @@ target_include_directories(${MODULE_NAME} PRIVATE
 	${MODULE_BASE_DIR}/mod_accessauth
 	${MODULE_BASE_DIR}/mod_pinpad
 	${MODULE_BASE_DIR}/mod_CameraConfigManage #for header file
+	${MODULE_BASE_DIR}/mod_chromium
 )
 
 # 添加实体需要依赖的其他共享库(包括系统库)

+ 3 - 3
Module/mod_healthmanager/EntityBootStruct.h

@@ -294,15 +294,15 @@ ErrorCodeEnum BootStep::StartStartupEntities(CEntityBase* pTrigger)
         std::vector <StartEntityOperation*> pendingEntiList;
         for (auto& entity : entityList) {
             StartEntityOperation* startOperat = new StartEntityOperation(pTrigger, entity);
-            Dbg("to start entity: %s ...", entity.entityName);
+            Dbg("to start entity: %s ...", entity.entityName.GetData());
             result = startOperat->StartEntity();
             if (!startOperat->IsDone()) {
                 pendingEntiList.push_back(startOperat);
             } else {
                 if (ISSUCCEEDED(result)) {
-                    Dbg("start entity: %s successfully :)", entity.entityName);
+                    Dbg("start entity: %s successfully :)", entity.entityName.GetData());
                 } else {
-                    Dbg("start entity: %s failed :( EC: %s", entity.entityName, SpStrError(result));
+                    Dbg("start entity: %s failed :( EC: %s", entity.entityName.GetData(), SpStrError(result));
                 }
                 delete startOperat;
                 if (FAILURED(result)) {

+ 39 - 4
Module/mod_healthmanager/mod_healthmanager.cpp

@@ -72,6 +72,9 @@ using namespace Initializer;
 #include "CameraConfigManage_def_g.h"
 using namespace CameraConfigManage;
 
+#include "Chromium_client_g.h"
+using namespace Chromium;
+
 template<class T>
 class TimerOutHelper : public ITimerListener
 {
@@ -233,6 +236,12 @@ void CHealthManagerEntity::OnStarted()
 				break;
 			}
 		}
+
+		CSimpleStringA strUrl;
+		result = GetGuidePageUrlWithStep(curStep, strUrl);
+		Dbg("Url:{%s}", (LPCTSTR)strUrl);
+		result = TellChromiumOpenGuidePage(strUrl);
+
 	}
 }
 
@@ -2200,14 +2209,40 @@ ErrorCodeEnum CHealthManagerEntity::GetGuidePageUrlWithStep(int whichStep, CSimp
     CSimpleStringA pagePath;
     ErrorCodeEnum ec = GetFunction()->GetPath("Base", pagePath);
 	pagePath.Append(SPLIT_SLASH_STR "res" SPLIT_SLASH_STR "ManagerDesktop" SPLIT_SLASH_STR "guide.html");
-	if (whichStep <= 0) {
-		strUrl = pagePath;
-	} else {
-		strUrl = CSimpleStringA::Format("%s#%d", pagePath.GetData(), whichStep);
+	if (whichStep > 0) {
+		pagePath = CSimpleStringA::Format("%s#%d", pagePath.GetData(), whichStep);
 	}
+	strUrl = CSimpleStringA("\'file:///") + pagePath + CSimpleStringA("\'");
 	return ec;
 }
 
+ErrorCodeEnum CHealthManagerEntity::TellChromiumOpenGuidePage(const CSimpleStringA& pageUrl)
+{
+	ErrorCodeEnum result(Error_Succeed);
+    auto pClient = new ChromiumSrv_ClientBase(this);
+	result = pClient->Connect();
+	if (result == Error_Succeed) {
+		ChromiumSrv_OpenBrowser_Req req;
+		ChromiumSrv_OpenBrowser_Ans ans;
+		req.mainUrl = pageUrl;
+		req.viceUrl = "";
+		req.exclusiveMode = true;
+		req.type = 0;
+
+		result = pClient->OpenBrowser(req, ans, 10000);
+		if (result == Error_Succeed) {
+			Dbg("Request Chromium::OpenBrowser succ!");
+		} else {
+			Dbg("Request Chromium::OpenBrowser  failed: %s", SpStrError(result));
+		}
+		pClient->GetFunction()->CloseSession();
+	} else {
+		pClient->SafeDelete();
+		Dbg("Connect to Chromium entity failed: %s", SpStrError(result));
+	}
+	return result;
+}
+
 void CHealthManagerEntity::DeployTerminal(SpReqAnsContext<HealthManagerService_DeployTerminal_Req, HealthManagerService_DeployTerminal_Ans>::Pointer ctx)
 {
 

+ 5 - 1
Module/mod_healthmanager/mod_healthmanager.h

@@ -79,7 +79,7 @@ public:
 	virtual void Handle_GetNetworkState(SpReqAnsContext<HealthManagerService_GetNetworkState_Req, HealthManagerService_GetNetworkState_Ans>::Pointer ctx);
 	virtual void Handle_QueryHardwareInfo(SpReqAnsContext<HealthManagerService_QueryHardwareInfo_Req, HealthManagerService_QueryHardwareInfo_Ans>::Pointer ctx);
 	virtual void Handle_ReadCenterConfigStr(SpReqAnsContext<HealthManagerService_ReadCenterConfigStr_Req, HealthManagerService_ReadCenterConfigStr_Ans>::Pointer ctx);
-	void Handle_ControlTerminalLife(SpReqAnsContext<HealthManagerService_ControlTerminalLife_Req, HealthManagerService_ControlTerminalLife_Ans>::Pointer ctx);
+	virtual void Handle_ControlTerminalLife(SpReqAnsContext<HealthManagerService_ControlTerminalLife_Req, HealthManagerService_ControlTerminalLife_Ans>::Pointer ctx);
     virtual void Handle_DeployTerminal(SpReqAnsContext<HealthManagerService_DeployTerminal_Req, HealthManagerService_DeployTerminal_Ans>::Pointer ctx);
 
 private:
@@ -225,6 +225,7 @@ public:
 	 */
 	bool IsNotConfigMode(int& stepMode);
 
+
 private:
 
 	CHealthManagerFSM m_fsm;
@@ -280,5 +281,8 @@ private:
 
 	ErrorCodeEnum GetTmpRootFilePath(CSimpleStringA& rootPath, CSimpleStringA& rootTmpPath);
 	ErrorCodeEnum GetGuidePageUrlWithStep(int whichStep, CSimpleStringA& strUrl);
+
+	ErrorCodeEnum TellChromiumOpenGuidePage(const CSimpleStringA& pageUrl);
+
 };
 #endif // __MOD_HEALTHMANAGER_H