Bläddra i källkod

#IQRV #comment [DeviceControl] 终端添加网络连接性判断的接口

gifur 4 år sedan
förälder
incheckning
e51bbf00cf

+ 6 - 1
Module/mod_DeviceControl/CMakeLists.txt

@@ -15,9 +15,14 @@ target_include_directories(${MODULE_NAME} PRIVATE
 set(${MODULE_PREFIX}_LIBS ${MODULE_BASE_LIBS})
 if(MSVC)
     list(APPEND ${MODULE_PREFIX}_LIBS Iphlpapi ws2_32)
+else()
+    list(APPEND ${MODULE_PREFIX}_LIBS libpublicFun)
 endif(MSVC)
 target_link_libraries(${MODULE_NAME} ${${MODULE_PREFIX}_LIBS})  
 
-target_include_directories(${MODULE_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
+target_include_directories(${MODULE_NAME} PRIVATE 
+${CMAKE_CURRENT_SOURCE_DIR}
+${OTHER_LIB_BASE_DIR}/libpublicFun
+)
 
 deploy_module(${MODULE_PREFIX} ${MODULE_NAME})

+ 15 - 1
Module/mod_DeviceControl/DeviceControl.xml

@@ -128,7 +128,21 @@
 				<param name="reserved4" type="string" />
 			</res>			
 		</twoway>
-		<twoway name="GetDevInfo" overlap="true" method_id="65535">
+    <twoway name="TestConnectivity" overlap="true">
+      <req>
+        <!--1: ping;2:socket connect;3: telnet-->
+        <param name="protocol" type="int" />
+        <param name="ip" type="string" />
+        <param name="port" type="int" />
+        <param name="reserved1" type="int" />
+        <param name="reserved2" type="string" />
+      </req>
+      <res>
+        <param name="result" type="int" />
+        <param name="message" type="string" />
+      </res>
+    </twoway>
+    <twoway name="GetDevInfo" overlap="true" method_id="65535">
 			<req>
 			</req>
 			<res>

+ 29 - 0
Module/mod_DeviceControl/DeviceControl_client_g.h

@@ -242,6 +242,35 @@ public:
 		return Error;
 	}
 
+	ErrorCodeEnum TestConnectivity(DeviceControlService_TestConnectivity_Req &Req, CSmartPointer<IAsynWaitSp> &spAsyncWait, DWORD dwTimeout)
+	{
+		CSmartPointer<IClientSessionFunction> pFunc = GetFunction();
+		CAutoBuffer Buf = SpObject2Buffer(Req);
+		return pFunc->AsyncRequest(DeviceControlService_Method_TestConnectivity, DeviceControlService_MethodSignature_TestConnectivity, Buf, spAsyncWait, dwTimeout);
+	}
+	ErrorCodeEnum TestConnectivity(DeviceControlService_TestConnectivity_Req &Req, DeviceControlService_TestConnectivity_Ans &Ans, DWORD dwTimeout)
+	{
+		CSmartPointer<IAsynWaitSp> spAsyncWait;
+		ErrorCodeEnum Error = TestConnectivity(Req, spAsyncWait, dwTimeout);
+		if (Error == Error_Succeed) {
+			bool bEnd = false;
+			Error = SpWaitAnswerObject(spAsyncWait, Ans, bEnd, dwTimeout);
+			LOG_ASSERT(Error || bEnd);
+		}
+		return Error;
+	}
+	ErrorCodeEnum TestConnectivity(DeviceControlService_TestConnectivity_Req &Req, DeviceControlService_TestConnectivity_Ans &Ans, DWORD dwTimeout, DWORD &dwUserError)
+	{
+		CSmartPointer<IAsynWaitSp> spAsyncWait;
+		ErrorCodeEnum Error = TestConnectivity(Req, spAsyncWait, dwTimeout);
+		if (Error == Error_Succeed) {
+			bool bEnd = false;
+			Error = SpWaitAnswerObject(spAsyncWait, Ans, bEnd, dwUserError, dwTimeout);
+			LOG_ASSERT(Error || bEnd);
+		}
+		return Error;
+	}
+
 	ErrorCodeEnum GetDevInfo(DeviceControlService_GetDevInfo_Req &Req, CSmartPointer<IAsynWaitSp> &spAsyncWait, DWORD dwTimeout)
 	{
 		CSmartPointer<IClientSessionFunction> pFunc = GetFunction();

+ 29 - 1
Module/mod_DeviceControl/DeviceControl_def_g.h

@@ -19,6 +19,7 @@ namespace DeviceControl {
 #define DeviceControlService_Method_QueryHardwareInfo 4
 #define DeviceControlService_Method_ReadCenterConfigStr 5
 #define DeviceControlService_Method_ReadConfigValue 6
+#define DeviceControlService_Method_TestConnectivity 7
 #define DeviceControlService_Method_GetDevInfo 65535
 
 #define DeviceControlService_MethodSignature_USB 109707598
@@ -28,6 +29,7 @@ namespace DeviceControl {
 #define DeviceControlService_MethodSignature_QueryHardwareInfo 1706767096
 #define DeviceControlService_MethodSignature_ReadCenterConfigStr -673154017
 #define DeviceControlService_MethodSignature_ReadConfigValue 730234720
+#define DeviceControlService_MethodSignature_TestConnectivity -42627632
 #define DeviceControlService_MethodSignature_GetDevInfo 296205965
 
 struct DeviceControlService_USB_Req
@@ -163,7 +165,6 @@ struct DeviceControlService_QueryHardwareInfo_Req
 
 	void Serialize(SpBuffer &Buf)
 	{
-		// go down on sonar's knee.
 	}
 
 };
@@ -253,6 +254,33 @@ struct DeviceControlService_ReadConfigValue_Ans
 
 };
 
+struct DeviceControlService_TestConnectivity_Req
+{
+	int protocol;
+	CSimpleStringA ip;
+	int port;
+	int reserved1;
+	CSimpleStringA reserved2;
+
+	void Serialize(SpBuffer &Buf)
+	{
+		auto & buf = Buf & protocol & ip & port & reserved1 & reserved2;
+	}
+
+};
+
+struct DeviceControlService_TestConnectivity_Ans
+{
+	int result;
+	CSimpleStringA message;
+
+	void Serialize(SpBuffer &Buf)
+	{
+		auto & buf = Buf & result & message;
+	}
+
+};
+
 struct DeviceControlService_GetDevInfo_Req
 {
 

+ 25 - 0
Module/mod_DeviceControl/DeviceControl_server_g.h

@@ -79,6 +79,13 @@ public:
 				Error = Error_MethodSignatureFailed;
 			}
 			break;
+		case DeviceControlService_Method_TestConnectivity:
+			if (dwSignature == DeviceControlService_MethodSignature_TestConnectivity) {
+				bOverlap = true;
+			} else {
+				Error = Error_MethodSignatureFailed;
+			}
+			break;
 		case DeviceControlService_Method_GetDevInfo:
 			if (dwSignature == DeviceControlService_MethodSignature_GetDevInfo) {
 				bOverlap = true;
@@ -132,6 +139,11 @@ public:
 				Error = Error_MethodSignatureFailed;
 			}
 			break;
+		case DeviceControlService_Method_TestConnectivity:
+			if (dwSignature != DeviceControlService_MethodSignature_TestConnectivity) {
+				Error = Error_MethodSignatureFailed;
+			}
+			break;
 		case DeviceControlService_Method_GetDevInfo:
 			if (dwSignature != DeviceControlService_MethodSignature_GetDevInfo) {
 				Error = Error_MethodSignatureFailed;
@@ -179,6 +191,11 @@ public:
 	/// override by user
 	}
 
+	virtual void Handle_TestConnectivity(SpReqAnsContext<DeviceControlService_TestConnectivity_Req, DeviceControlService_TestConnectivity_Ans>::Pointer ctx)
+	{
+	/// override by user
+	}
+
 	virtual void Handle_GetDevInfo(SpReqAnsContext<DeviceControlService_GetDevInfo_Req, DeviceControlService_GetDevInfo_Ans>::Pointer ctx)
 	{
 	/// override by user
@@ -256,6 +273,14 @@ public:
 						Handle_ReadConfigValue(ctx);
 					}
 					break;
+				case DeviceControlService_Method_TestConnectivity:
+					{
+						SpReqAnsContext<DeviceControlService_TestConnectivity_Req,DeviceControlService_TestConnectivity_Ans>::Pointer ctx;
+						ctx.Attach(new SpReqAnsContext<DeviceControlService_TestConnectivity_Req,DeviceControlService_TestConnectivity_Ans>(pTransactionContext));
+						SpBuffer2Object(Buf, ctx->Req);
+						Handle_TestConnectivity(ctx);
+					}
+					break;
 				case DeviceControlService_Method_GetDevInfo:
 					{
 						SpReqAnsContext<DeviceControlService_GetDevInfo_Req,DeviceControlService_GetDevInfo_Ans>::Pointer ctx;

+ 34 - 0
Module/mod_DeviceControl/mod_DeviceControl.cpp

@@ -7,6 +7,7 @@
 #include "CommEntityUtil.hpp"
 #include <string>
 #include <map>
+#include "publicFunExport.h"
 
 void CDeviceControlServerSession::Handle_USB(SpReqAnsContext<DeviceControlService_USB_Req, DeviceControlService_USB_Ans>::Pointer ctx)
 {
@@ -51,6 +52,12 @@ void CDeviceControlServerSession::Handle_GetDevInfo(SpReqAnsContext<DeviceContro
 	m_pEntity->GetDevInfo(ctx);
 }
 
+void CDeviceControlServerSession::Handle_TestConnectivity(SpReqAnsContext<DeviceControlService_TestConnectivity_Req, DeviceControlService_TestConnectivity_Ans>::Pointer ctx)
+{
+    LOG_FUNCTION();
+    m_pEntity->TestConnectivity(ctx);
+}
+
 void CDeviceControlEntity::QueryHardwareInfo(SpReqAnsContext<DeviceControlService_QueryHardwareInfo_Req, DeviceControlService_QueryHardwareInfo_Ans>::Pointer ctx)
 {
 	CSystemStaticInfo info;
@@ -118,6 +125,33 @@ void CDeviceControlEntity::ReadConfigValue(SpReqAnsContext<DeviceControlService_
     return;
 }
 
+void CDeviceControlEntity::TestConnectivity(SpReqAnsContext<DeviceControlService_TestConnectivity_Req, DeviceControlService_TestConnectivity_Ans>::Pointer ctx)
+{
+    ErrorCodeEnum result(Error_NotInit);
+
+    if (ctx->Req.protocol == 0) {
+        result = Error_Param;
+    } else if (ctx->Req.protocol == 1) {
+        if (ctx->Req.ip.IsNullOrEmpty()) {
+            result = Error_Param;
+        } else {
+            const int res = Ping(std::string(ctx->Req.ip));
+            if (res == 0) {
+                ctx->Ans.result = 0;
+                ctx->Ans.message.Clear();
+            } else {
+                ctx->Ans.result = -1;
+                ctx->Ans.message = CSimpleStringA::Format("Ping %s failed: %d", ctx->Req.ip.GetData(), res);
+            }
+            result = Error_Succeed;
+        }
+    } else {
+        result = Error_NotSupport;
+    }
+    ctx->Answer(result);
+
+}
+
 std::pair<ErrorCodeEnum, CSimpleStringA> CDeviceControlEntity::__ReadCenterConfigStr(CSimpleStringA key, CSimpleStringA entityName="")
 {
 	CSimpleStringA str = "";

+ 6 - 0
Module/mod_DeviceControl/mod_DeviceControl.h

@@ -42,6 +42,8 @@ public:
 	virtual void Handle_ReadCenterConfigStr(SpReqAnsContext<DeviceControlService_ReadCenterConfigStr_Req, DeviceControlService_ReadCenterConfigStr_Ans>::Pointer ctx);
 	virtual void Handle_ReadConfigValue(SpReqAnsContext<DeviceControlService_ReadConfigValue_Req, DeviceControlService_ReadConfigValue_Ans>::Pointer ctx);
 	virtual void Handle_GetDevInfo(SpReqAnsContext<DeviceControlService_GetDevInfo_Req, DeviceControlService_GetDevInfo_Ans>::Pointer ctx);
+	virtual void Handle_TestConnectivity(SpReqAnsContext<DeviceControlService_TestConnectivity_Req, DeviceControlService_TestConnectivity_Ans>::Pointer ctx);
+
 private:
 	CDeviceControlEntity *m_pEntity;
 };
@@ -165,6 +167,10 @@ public:
 	{
 		ctx->Answer(Error_NotImpl);
 	}
+
+    void TestConnectivity(SpReqAnsContext<DeviceControlService_TestConnectivity_Req, DeviceControlService_TestConnectivity_Ans>::Pointer ctx);
+
+
 	void OnSelfTest(EntityTestEnum eTestType,CSmartPointer<ITransactionContext> pTransactionContext)
 	{
 		m_fsm.SelfTest(eTestType,pTransactionContext);