From 5addedcb92fcd56239825f301502aabbeaf5e325 Mon Sep 17 00:00:00 2001
From: ‘liusuyi’ <1951119284@qq.com>
Date: 星期二, 24 十月 2023 11:26:46 +0800
Subject: [PATCH] 异步登录成功后获取通道和配置流媒体增加线程同步

---
 ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java |   53 +++++++++++++----------------------------------------
 1 files changed, 13 insertions(+), 40 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 9ebe065..a052a0f 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
@@ -3,6 +3,7 @@
 import com.ruoyi.alarm.global.domain.GuidePriorityQueue;
 import com.ruoyi.alarm.global.domain.GuideTask;
 import com.ruoyi.common.annotation.SdkOperate;
+import com.ruoyi.common.utils.Threads;
 import com.ruoyi.common.utils.file.FileUtils;
 import com.ruoyi.common.utils.file.MimeTypeUtils;
 import com.ruoyi.common.utils.uuid.IdUtils;
@@ -10,11 +11,10 @@
 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.device.camera.service.impl.AsyncLogin;
 import com.ruoyi.media.domain.Vtdu;
 import com.ruoyi.media.service.IVtduService;
 import com.ruoyi.utils.gis.GisUtil;
@@ -22,13 +22,11 @@
 import com.ruoyi.device.hiksdk.service.IHikClientService;
 import com.ruoyi.device.hiksdk.sdk.LoginResultCallBack;
 import com.ruoyi.utils.minio.MinioUtil;
-import com.sun.jna.Native;
 import com.sun.jna.NativeLong;
 import com.sun.jna.Platform;
 import com.sun.jna.Pointer;
 import com.sun.jna.ptr.IntByReference;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 
 import java.util.Base64;
@@ -40,7 +38,6 @@
 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.*;
 
 /**
@@ -60,7 +57,7 @@
     private IArdChannelService ardChannelService;
     @Resource
     private IVtduService vtduService;
-
+    private final Object lock = new Object();
     public static HCNetSDK hCNetSDK = HCNetSDK.hCNetSDK;
     private static FExceptionCallBack fExceptionCallBack;//寮傚父鍥炶皟
 
@@ -114,20 +111,22 @@
             //鍚屾鐧诲綍
             int lUserID = hCNetSDK.NET_DVR_Login_V40(m_strLoginInfo, m_strDeviceInfo);
             if (lUserID < 0) {
-                int errorCode = hCNetSDK.NET_DVR_GetLastError();
-                log.debug(camera.getIp() + ":" + camera.getPort() + "鐧诲綍澶辫触,閿欒鐮侊細" + errorCode);
+                log.debug("Login Failed [ " + camera.getIp() + ":" + camera.getPort() + " ],閿欒鐮侊細" + hCNetSDK.NET_DVR_GetLastError());
                 camera.setChanNum(0);
                 camera.setLoginId(-1);
                 camera.setState("0");
-            } else {
+                return;
+            }
+            synchronized (lock) {
+                log.debug("Login Success [ " + camera.getIp() + ":" + camera.getPort() + " ]");
                 if (fExceptionCallBack == null) {
                     fExceptionCallBack = new ExceptionCallBack();//寮傚父鍥炶皟
                     //璁剧疆寮傚父鍥炶皟鍑芥暟(鍙湪鍥炶皟鍑芥暟涓幏鍙栬澶囦笂涓嬬嚎鐘舵�佺瓑)
                     if (!hCNetSDK.NET_DVR_SetExceptionCallBack_V30(0, 0, fExceptionCallBack, null)) {
-                        log.info("Set fExceptionCallBack function fail");
+                        log.debug("Set fExceptionCallBack function fail");
                         return;
                     } else {
-                        log.info("Set fExceptionCallBack function successfully!");
+                        log.debug("Set fExceptionCallBack function successfully!");
                     }
                 }
 
@@ -139,7 +138,7 @@
                 GlobalVariable.loginMap.put(camera.getId(), lUserID);
                 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);
@@ -183,6 +182,7 @@
                 }
                 ardCamerasService.updateArdCameras(camera);
             }
+
         } catch (Exception ex) {
             log.error("娉ㄥ唽璁惧寮傚父", ex);
         }
@@ -243,28 +243,6 @@
 
     }
 
-    /**
-     * @鎻忚堪 鐧诲綍鎵�鏈夌浉鏈�
-     * @鍙傛暟 []
-     * @杩斿洖鍊� void
-     * @鍒涘缓浜� 鍒樿嫃涔�
-     * @鍒涘缓鏃堕棿 2023/2/3 10:10
-     * @淇敼浜哄拰鍏跺畠淇℃伅
-     */
-    @Override
-    public void loginAll() {
-        try {
-            ArdCameras ardCamera = new ArdCameras();
-            ardCamera.setFactory("1");
-            List<ArdCameras> ardCameras = ardCamerasService.selectArdCamerasListNoDataScope(ardCamera);
-            for (ArdCameras camera : ardCameras) {
-                //鐧诲綍
-                login(camera);
-            }
-        } catch (Exception ex) {
-            log.error("鍒濆鍖栫櫥褰曠浉鏈哄紓甯革細" + ex.getMessage());
-        }
-    }
 
     /**
      * @鎻忚堪 娉ㄩ攢鐧诲綍
@@ -318,6 +296,7 @@
      * @淇敼浜哄拰鍏跺畠淇℃伅
      */
     @Override
+    @SdkOperate
     public boolean pTZControlWithSpeed(CameraCmd cmd) {
         String cameraId = cmd.getCameraId();
         boolean enable = cmd.isEnable();
@@ -1068,7 +1047,6 @@
      * @淇敼浜哄拰鍏跺畠淇℃伅
      */
     @Override
-    @SdkOperate
     public boolean controlDefogcfg(CameraCmd cmd) {
         String cameraId = cmd.getCameraId();
         boolean enable = cmd.isEnable();
@@ -1114,7 +1092,6 @@
      * @淇敼浜哄拰鍏跺畠淇℃伅
      */
     @Override
-    @SdkOperate
     public boolean controlInfrarecfg(CameraCmd cmd) {
         String cameraId = cmd.getCameraId();
         boolean enable = cmd.isEnable();
@@ -1162,7 +1139,6 @@
      * @淇敼浜哄拰鍏跺畠淇℃伅
      */
     @Override
-    @SdkOperate
     public boolean controlFocusMode(CameraCmd cmd) {
         String cameraId = cmd.getCameraId();
         boolean enable = cmd.isEnable();
@@ -1235,7 +1211,6 @@
      * @淇敼浜哄拰鍏跺畠淇℃伅
      */
     @Override
-    @SdkOperate
     public boolean controlPTHeateRpwron(CameraCmd cmd) {
         String cameraId = cmd.getCameraId();
         boolean enable = cmd.isEnable();
@@ -1268,7 +1243,6 @@
      * @淇敼浜哄拰鍏跺畠淇℃伅
      */
     @Override
-    @SdkOperate
     public boolean controlCameraDeicing(CameraCmd cmd) {
         String cameraId = cmd.getCameraId();
         boolean enable = cmd.isEnable();
@@ -1349,7 +1323,6 @@
      * @淇敼浜哄拰鍏跺畠淇℃伅
      */
     @Override
-    @SdkOperate
     public String picCutCate(CameraCmd cmd) {
         String cameraId = cmd.getCameraId();
         Integer channelNum = cmd.getChanNo();

--
Gitblit v1.9.3