From 4806b676dbbab4675e5ee43b4018f2cd9d43797f Mon Sep 17 00:00:00 2001 From: ‘liusuyi’ <1951119284@qq.com> Date: 星期一, 23 十月 2023 17:15:09 +0800 Subject: [PATCH] 1. 将sdk动态链接库dll集成到项目内,提升部署便捷性; 2. 增加设备断线重连回调方法,打印相关日志; 3. 删除多余依赖,减小jar包体积; 4. 处理SDK日志打印; --- ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java | 80 ++++++++++++---------------------------- 1 files changed, 24 insertions(+), 56 deletions(-) diff --git a/ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java b/ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java index d094ae1..ccf35e4 100644 --- a/ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java +++ b/ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java @@ -10,8 +10,11 @@ import com.ruoyi.device.camera.service.IArdCamerasService; import com.ruoyi.device.channel.domain.ArdChannel; import com.ruoyi.device.channel.service.IArdChannelService; +import com.ruoyi.device.dhsdk.lib.LibraryLoad; +import com.ruoyi.device.dhsdk.lib.NetSDKLib; import com.ruoyi.device.hiksdk.common.GlobalVariable; import com.ruoyi.device.camera.domain.ArdCameras; +import com.ruoyi.device.hiksdk.sdk.ExceptionCallBack; import com.ruoyi.media.domain.Vtdu; import com.ruoyi.media.service.IVtduService; import com.ruoyi.utils.gis.GisUtil; @@ -37,6 +40,7 @@ import java.util.*; import java.util.concurrent.PriorityBlockingQueue; +import static com.ruoyi.device.hiksdk.common.GlobalVariable.loginCameraMap; import static com.ruoyi.device.hiksdk.sdk.HCNetSDK.*; /** @@ -57,52 +61,10 @@ @Resource private IVtduService vtduService; - private static HCNetSDK hCNetSDK; + public static HCNetSDK hCNetSDK = HCNetSDK.hCNetSDK; + private static FExceptionCallBack fExceptionCallBack;//寮傚父鍥炶皟 - @Override - public boolean init() { - try { - log.debug("寮�濮嬪姞杞絪dk搴撴枃浠惰矾寰�"); - if (Platform.isWindows()) { - String WIN_PATH = System.getProperty("user.dir") + File.separator + "lib\\hikDll\\HCNetSDK.dll"; - log.debug("褰撳墠Windows骞冲彴鐨剆dk搴撹矾寰勶細" + WIN_PATH); - hCNetSDK = (HCNetSDK) Native.loadLibrary(WIN_PATH, HCNetSDK.class); - } else { - log.debug("Linux骞冲彴"); - String LINUX_PATH = System.getProperty("user.dir") + File.separator + "hiklib" + File.separator + "libhcnetsdk.so"; - log.debug("褰撳墠Linux骞冲彴鐨剆dk搴撹矾寰勶細" + LINUX_PATH); - hCNetSDK = (HCNetSDK) Native.loadLibrary(LINUX_PATH, HCNetSDK.class); - //璁剧疆HCNetSDKCom缁勪欢搴撴墍鍦ㄨ矾寰� - //libhcnetsdk.so - String strPathCom = "/home/hiklib"; - NET_DVR_LOCAL_SDK_PATH struComPath = new NET_DVR_LOCAL_SDK_PATH(); - System.arraycopy(strPathCom.getBytes(), 0, struComPath.sPath, 0, strPathCom.length()); - struComPath.write(); - hCNetSDK.NET_DVR_SetSDKInitCfg(2, struComPath.getPointer()); - - //璁剧疆libcrypto.so鎵�鍦ㄨ矾寰� - BYTE_ARRAY ptrByteArrayCrypto = new BYTE_ARRAY(256); - String strPathCrypto = "/home/hiklib/libcrypto.so.1.1"; - System.arraycopy(strPathCrypto.getBytes(), 0, ptrByteArrayCrypto.byValue, 0, strPathCrypto.length()); - ptrByteArrayCrypto.write(); - hCNetSDK.NET_DVR_SetSDKInitCfg(3, ptrByteArrayCrypto.getPointer()); - - //璁剧疆libssl.so鎵�鍦ㄨ矾寰� - BYTE_ARRAY ptrByteArraySsl = new BYTE_ARRAY(256); - String strPathSsl = "/home/hiklib/libssl.so.1.1"; - System.arraycopy(strPathSsl.getBytes(), 0, ptrByteArraySsl.byValue, 0, strPathSsl.length()); - ptrByteArraySsl.write(); - hCNetSDK.NET_DVR_SetSDKInitCfg(4, ptrByteArraySsl.getPointer()); - } - return true; - } catch (Exception ex) { - log.error("鍔犺浇搴撴枃浠跺紓甯革細" + ex.getMessage()); - return false; - } - } - - @Override /** * @鎻忚堪 娉ㄥ唽鐧诲綍 鍙敮鎸佸悓姝ョ櫥闄嗭紝涓斿畼鏂逛笉寤鸿鐩存帴鍦ㄦ鎺ュ彛涓嬪啓鑰楁椂鎿嶄綔 * @鍙傛暟 [dvrLogin] @@ -111,8 +73,8 @@ * @鍒涘缓鏃堕棿 2023/1/17 16:12 * @淇敼浜哄拰鍏跺畠淇℃伅 */ - @Async - public void syncLogin(ArdCameras camera) { + @Override + public void login(ArdCameras camera) { // 鍒濆鍖� if (!hCNetSDK.NET_DVR_Init()) { log.error("SDK鍒濆鍖栧け璐�"); @@ -130,7 +92,7 @@ short m_sPort = camera.getPort().shortValue(); //璁剧疆杩炴帴鏃堕棿涓庨噸杩炴椂闂� hCNetSDK.NET_DVR_SetConnectTime(2000, 1); - hCNetSDK.NET_DVR_SetReconnect(100000, true); + hCNetSDK.NET_DVR_SetReconnect(5000, true); //璁惧淇℃伅, 杈撳嚭鍙傛暟 HCNetSDK.NET_DVR_DEVICEINFO_V40 m_strDeviceInfo = new HCNetSDK.NET_DVR_DEVICEINFO_V40(); HCNetSDK.NET_DVR_USER_LOGIN_INFO m_strLoginInfo = new HCNetSDK.NET_DVR_USER_LOGIN_INFO(); @@ -152,13 +114,21 @@ int lUserID = hCNetSDK.NET_DVR_Login_V40(m_strLoginInfo, m_strDeviceInfo); if (lUserID < 0) { int errorCode = hCNetSDK.NET_DVR_GetLastError(); - log.error("鐧诲綍寮傚父锛�" + errorCode); - - log.debug(camera.getIp() + ":" + camera.getPort() + "鐧诲綍澶辫触"); + log.debug(camera.getIp() + ":" + camera.getPort() + "鐧诲綍澶辫触,閿欒鐮侊細"+errorCode); camera.setChanNum(0); camera.setLoginId(-1); camera.setState("0"); } else { + if (fExceptionCallBack == null) { + fExceptionCallBack = new ExceptionCallBack();//寮傚父鍥炶皟 + //璁剧疆寮傚父鍥炶皟鍑芥暟(鍙湪鍥炶皟鍑芥暟涓幏鍙栬澶囦笂涓嬬嚎鐘舵�佺瓑) + if (!hCNetSDK.NET_DVR_SetExceptionCallBack_V30(0, 0, fExceptionCallBack, null)) { + log.info("Set fExceptionCallBack function fail"); + return; + } else { + log.info("Set fExceptionCallBack function successfully!"); + } + } if (GlobalVariable.loginMap.containsKey(camera.getId())) { GlobalVariable.loginMap.remove(camera.getId()); @@ -166,8 +136,9 @@ //鍒犻櫎绠$悊閫氶亾 ardChannelService.deleteArdChannelByDeviceId(camera.getId()); GlobalVariable.loginMap.put(camera.getId(), lUserID); - log.debug(camera.getIp() + ":" + camera.getPort() + "鐧诲綍鎴愬姛"); + GlobalVariable.loginCameraMap.put(lUserID,camera); + log.debug("Login Success [ " + camera.getIp() + ":" + camera.getPort() + " ]"); camera.setLoginId(lUserID); camera.setState("1"); camera.setChanNum((int) m_strDeviceInfo.struDeviceV30.byChanNum); @@ -279,14 +250,12 @@ @Override public void loginAll() { try { - log.debug("鍔犺浇lib瀹屾垚锛�"); ArdCameras ardCamera = new ArdCameras(); ardCamera.setFactory("1"); List<ArdCameras> ardCameras = ardCamerasService.selectArdCamerasListNoDataScope(ardCamera); for (ArdCameras camera : ardCameras) { - Thread.sleep(500); - //寮傛鐧诲綍 - syncLogin(camera); + //鐧诲綍 + login(camera); } } catch (Exception ex) { log.error("鍒濆鍖栫櫥褰曠浉鏈哄紓甯革細" + ex.getMessage()); @@ -897,7 +866,6 @@ log.error("鎺у埗澶辫触,璇风◢鍚庨噸璇�" + code); return new HashMap<>(); } - } /** -- Gitblit v1.9.3