package com.ruoyi.device.hiksdk.util.hikSdkUtil; import com.ruoyi.alarm.globalAlarm.domain.GuidePriorityQueue; import com.ruoyi.alarm.globalAlarm.domain.GuideTask; import com.ruoyi.common.utils.spring.SpringUtils; import com.ruoyi.device.camera.domain.ArdCameras; import com.ruoyi.device.camera.mapper.ArdCamerasMapper; import com.ruoyi.device.hiksdk.common.GlobalVariable; 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.PriorityQueue; import java.util.concurrent.PriorityBlockingQueue; /** * @Description: 异步登录回调 * @ClassName: FLoginResultCallBack * @Author: 刘苏义 * @Date: 2023年06月12日13:34 * @Version: 1.0 **/ @Slf4j(topic = "hikSdk") 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) { 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() + "登录成功"); camera.setLoginId(lUserID); camera.setChannel((int) lpDeviceinfo.byChanNum); //创建引导队列 Comparator comparator = GuidePriorityQueue.getComparator(); PriorityBlockingQueue priorityQueue = new PriorityBlockingQueue<>(1000,comparator); GuidePriorityQueue.cameraQueueMap.put(camera.getId(), priorityQueue); } else { log.info(camera.getIp() + ":" + camera.getPort() + "登录失败"); camera.setChannel(0); camera.setLoginId(-1); } ArdCamerasMapper ardCamerasMapper = SpringUtils.getBean(ArdCamerasMapper.class); ardCamerasMapper.updateArdCameras(camera); return 1; } }