Browse Source

#IQRV #comment [Chromium] openbrowser和closeBrowser

陈良瑜80374463 3 years ago
parent
commit
3f69a5b65b

+ 32 - 17
Module/mod_chromium/Chromium.xml

@@ -1,23 +1,38 @@
 <?xml version="1.0" encoding="gb2312" ?>
 <entity name="Chromium">
 	<class name="ChromiumSrv" overlap="true" exclusive="false">
-    <twoway name="OpenBrowser" overlap="true">
-      <req>
-        <param name="mainUrl" type="string"/>
-        <param name="viceUrl" type="string"/>
-        <param name="type" type="int"/>
-        <param name="param1" type="string"/>
-        <param name="param2" type="string"/>
-        <param name="exclusiveMode" type="bool"/>
-        <param name="reserved1" type="int"/>
-        <param name="reserved2" type="int"/>
-      </req>
-      <res>
-        <param name="result" type="int"/>
-        <param name="reserved1" type="int"/>
-        <param name="reserved2" type="string"/>
-      </res>
-    </twoway>
+		<twoway name="OpenBrowser" overlap="true">
+			<req>
+				<param name="mainUrl" type="string"/>
+				<param name="viceUrl" type="string"/>
+				<param name="type" type="string"/>
+				<param name="param1" type="string"/>
+				<param name="param2" type="string"/>
+				<param name="name" type="string"/>
+				<param name="exclusiveMode" type="bool"/>
+				<param name="top" type="int"/>
+				<param name="reserved1" type="int"/>
+				<param name="reserved2" type="int"/>
+			</req>
+			<res>
+				<param name="result" type="int"/>
+				<param name="reserved1" type="int"/>
+				<param name="reserved2" type="string"/>
+			</res>
+		</twoway>
+		<twoway name="CloseBrowser" overlap="true">
+			<req>
+				<param name="type" type="string"/>
+				<param name="name" type="string"/>
+				<param name="reserved1" type="int"/>
+				<param name="reserved2" type="int"/>
+			</req>
+			<res>
+				<param name="result" type="int"/>
+				<param name="reserved1" type="int"/>
+				<param name="reserved2" type="string"/>
+			</res>
+		</twoway>
 	</class>
 	<message name="ChromiumBroadcast">
 			<param name="broadcastJson" type="string"/>

+ 31 - 0
Module/mod_chromium/Chromium_client_g.h

@@ -90,6 +90,37 @@ public:
 		return Error;
 	}
 
+	ErrorCodeEnum CloseBrowser(ChromiumSrv_CloseBrowser_Req &Req, CSmartPointer<IAsynWaitSp> &spAsyncWait, DWORD dwTimeout)
+	{
+		CSmartPointer<IClientSessionFunction> pFunc = GetFunction();
+		CAutoBuffer Buf = SpObject2Buffer(Req);
+		auto ret = pFunc->AsyncRequest(ChromiumSrv_Method_CloseBrowser, ChromiumSrv_MethodSignature_CloseBrowser, Buf, spAsyncWait, m_context, dwTimeout);
+		m_context.clear();
+		return ret;
+	}
+	ErrorCodeEnum CloseBrowser(ChromiumSrv_CloseBrowser_Req &Req, ChromiumSrv_CloseBrowser_Ans &Ans, DWORD dwTimeout)
+	{
+		CSmartPointer<IAsynWaitSp> spAsyncWait;
+		ErrorCodeEnum Error = CloseBrowser(Req, spAsyncWait, dwTimeout);
+		if (Error == Error_Succeed) {
+			bool bEnd = false;
+			Error = SpWaitAnswerObject(spAsyncWait, Ans, bEnd, dwTimeout);
+			LOG_ASSERT(Error || bEnd);
+		}
+		return Error;
+	}
+	ErrorCodeEnum CloseBrowser(ChromiumSrv_CloseBrowser_Req &Req, ChromiumSrv_CloseBrowser_Ans &Ans, DWORD dwTimeout, DWORD &dwUserError)
+	{
+		CSmartPointer<IAsynWaitSp> spAsyncWait;
+		ErrorCodeEnum Error = CloseBrowser(Req, spAsyncWait, dwTimeout);
+		if (Error == Error_Succeed) {
+			bool bEnd = false;
+			Error = SpWaitAnswerObject(spAsyncWait, Ans, bEnd, dwUserError, dwTimeout);
+			LOG_ASSERT(Error || bEnd);
+		}
+		return Error;
+	}
+
 
 	bool SafeDelete()
 	{

+ 33 - 2
Module/mod_chromium/Chromium_def_g.h

@@ -13,23 +13,27 @@ namespace Chromium {
 //
 
 #define ChromiumSrv_Method_OpenBrowser 0
+#define ChromiumSrv_Method_CloseBrowser 1
 
 #define ChromiumSrv_MethodSignature_OpenBrowser 1632538869
+#define ChromiumSrv_MethodSignature_CloseBrowser -1561571899
 
 struct ChromiumSrv_OpenBrowser_Req
 {
 	CSimpleStringA mainUrl;
 	CSimpleStringA viceUrl;
-	int type;
+	CSimpleStringA type;
 	CSimpleStringA param1;
 	CSimpleStringA param2;
+	CSimpleStringA name;
 	bool exclusiveMode;
+	int top;
 	int reserved1;
 	int reserved2;
 
 	void Serialize(SpBuffer &Buf)
 	{
-		auto & buf = Buf & mainUrl & viceUrl & type & param1 & param2 & exclusiveMode & reserved1 & reserved2;
+		auto & buf = Buf & mainUrl & viceUrl & type & param1 & param2 & name & exclusiveMode & top & reserved1 & reserved2;
 	}
 
 };
@@ -47,6 +51,33 @@ struct ChromiumSrv_OpenBrowser_Ans
 
 };
 
+struct ChromiumSrv_CloseBrowser_Req
+{
+	CSimpleStringA type;
+	CSimpleStringA name;
+	int reserved1;
+	int reserved2;
+
+	void Serialize(SpBuffer &Buf)
+	{
+		auto & buf = Buf & type & name & reserved1 & reserved2;
+	}
+
+};
+
+struct ChromiumSrv_CloseBrowser_Ans
+{
+	int result;
+	int reserved1;
+	CSimpleStringA reserved2;
+
+	void Serialize(SpBuffer &Buf)
+	{
+		auto & buf = Buf & result & reserved1 & reserved2;
+	}
+
+};
+
 
 ///////////////////////////
 

+ 26 - 0
Module/mod_chromium/Chromium_server_g.h

@@ -37,6 +37,13 @@ public:
 				Error = Error_MethodSignatureFailed;
 			}
 			break;
+		case ChromiumSrv_Method_CloseBrowser:
+			if (dwSignature == ChromiumSrv_MethodSignature_CloseBrowser) {
+				bOverlap = true;
+			} else {
+				Error = Error_MethodSignatureFailed;
+			}
+			break;
 		default:
 			Error = Error_MethodNotFound;
 			break;
@@ -53,6 +60,11 @@ public:
 				Error = Error_MethodSignatureFailed;
 			}
 			break;
+		case ChromiumSrv_Method_CloseBrowser:
+			if (dwSignature != ChromiumSrv_MethodSignature_CloseBrowser) {
+				Error = Error_MethodSignatureFailed;
+			}
+			break;
 		default:
 			Error = Error_MethodNotFound;
 			break;
@@ -65,6 +77,11 @@ public:
 	/// override by user
 	}
 
+	virtual void Handle_CloseBrowser(SpReqAnsContext<ChromiumSrv_CloseBrowser_Req, ChromiumSrv_CloseBrowser_Ans>::Pointer ctx)
+	{
+	/// override by user
+	}
+
 	virtual void OnRequest(CSmartPointer<ITransactionContext> pTransactionContext)
 	{
 		CAutoBuffer Buf;
@@ -90,6 +107,15 @@ public:
 						Handle_OpenBrowser(ctx);
 					}
 					break;
+				case ChromiumSrv_Method_CloseBrowser:
+					{
+						SpReqAnsContext<ChromiumSrv_CloseBrowser_Req,ChromiumSrv_CloseBrowser_Ans>::Pointer ctx;
+						ctx.Attach(new SpReqAnsContext<ChromiumSrv_CloseBrowser_Req,ChromiumSrv_CloseBrowser_Ans>(pTransactionContext));
+						SpBuffer2Object(Buf, ctx->Req);
+						pTransactionContext->GetLinkContext(ctx->link);
+						Handle_CloseBrowser(ctx);
+					}
+					break;
 				default:
 					assert(0);
 					break;