| | |
| | | package com.ruoyi.device.hiksdk.util.hikSdkUtil; |
| | | |
| | | import com.ruoyi.alarm.global.domain.GuidePriorityQueue; |
| | | import com.ruoyi.alarm.global.domain.GuideTask; |
| | | import com.ruoyi.common.utils.spring.SpringUtils; |
| | | import com.ruoyi.common.utils.uuid.IdUtils; |
| | | import com.ruoyi.device.camera.domain.ArdCameras; |
| | | import com.ruoyi.device.camera.mapper.ArdCamerasMapper; |
| | | 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.hiksdk.common.GlobalVariable; |
| | | import com.ruoyi.device.hiksdk.service.IHikClientService; |
| | | import com.sun.jna.Pointer; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.util.Comparator; |
| | | import java.util.List; |
| | | import java.util.concurrent.PriorityBlockingQueue; |
| | | |
| | | /** |
| | | * @Description: 异步登录回调 |
| | |
| | | public class LoginResultCallBack implements HCNetSDK.FLoginResultCallBack { |
| | | |
| | | private ArdCameras camera; |
| | | |
| | | public LoginResultCallBack(ArdCameras camera) { |
| | | this.camera = camera; |
| | | } |
| | | |
| | | @Override |
| | | public int invoke(int lUserID, int dwResult, HCNetSDK.NET_DVR_DEVICEINFO_V30 lpDeviceinfo, Pointer pUser) { |
| | | IArdChannelService ardChannelService = SpringUtils.getBean(IArdChannelService.class); |
| | | IHikClientService hikClientService = SpringUtils.getBean(IHikClientService.class); |
| | | IArdCamerasService ardCamerasService = SpringUtils.getBean(IArdCamerasService.class); |
| | | if (GlobalVariable.loginMap.containsKey(camera.getId())) { |
| | | GlobalVariable.loginMap.remove(camera.getId()); |
| | | } |
| | | if (dwResult == 1) { |
| | | GlobalVariable.loginMap.put(camera.getId(), lUserID); |
| | | log.info(camera.getIp() + ":" + camera.getPort() + "登录成功"); |
| | | log.debug(camera.getIp() + ":" + camera.getPort() + "登录成功"); |
| | | camera.setLoginId(lUserID); |
| | | camera.setChannel((int) lpDeviceinfo.byChanNum); |
| | | camera.setChanNum((int) lpDeviceinfo.byChanNum); |
| | | camera.setStartDChan((int)lpDeviceinfo.byStartDChan); |
| | | |
| | | //获取最新通道 |
| | | List<ArdChannel> cameraChannelList = hikClientService.getCameraChannelList(camera); |
| | | if(cameraChannelList.size()>0) { |
| | | //删除管理通道 |
| | | ardChannelService.deleteArdChannelByDeviceId(camera.getId()); |
| | | for (ArdChannel channel : cameraChannelList) { |
| | | channel.setId(IdUtils.simpleUUID()); |
| | | ardChannelService.insertArdChannel(channel); |
| | | } |
| | | } |
| | | //创建引导队列 |
| | | Comparator<GuideTask> comparator = GuidePriorityQueue.getComparator(); |
| | | PriorityBlockingQueue<GuideTask> priorityQueue = new PriorityBlockingQueue<>(1000, comparator); |
| | | GuidePriorityQueue.cameraQueueMap.put(camera.getId(), priorityQueue); |
| | | } else { |
| | | log.info(camera.getIp() + ":" + camera.getPort() + "登录失败"); |
| | | camera.setChannel(0); |
| | | log.debug(camera.getIp() + ":" + camera.getPort() + "登录失败"); |
| | | camera.setChanNum(0); |
| | | camera.setLoginId(-1); |
| | | } |
| | | ArdCamerasMapper ardCamerasMapper = SpringUtils.getBean(ArdCamerasMapper.class); |
| | | ardCamerasMapper.updateArdCameras(camera); |
| | | ardCamerasService.updateArdCameras(camera); |
| | | return 1; |
| | | } |
| | | } |