package com.netsdk.demo.customize; import com.netsdk.demo.intelligentTraffic.trafficRadarDemo.TrafficRadarAnalyzerDataCB; import com.netsdk.demo.intelligentTraffic.trafficRadarDemo.TrafficRadarMessageCB; import com.netsdk.demo.intelligentTraffic.trafficRadarDemo.TrafficRadarUtils; import com.netsdk.demo.util.CaseMenu; import com.netsdk.lib.NetSDKLib; import com.netsdk.lib.ToolKits; import java.util.Scanner; /** * 雷视一体机 * * @author 47040 * @since Created in 2020/12/14 10:28 */ public class NoPicLitsenDemo { // The constant NetSDK public static final NetSDKLib netSdk = NetSDKLib.NETSDK_INSTANCE; // The constant ConfigSDK. public static NetSDKLib configSdk = NetSDKLib.CONFIG_INSTANCE; // The encode of String public static final String encode = TrafficRadarUtils.GetSystemEncode(); ////////////////////////////////////// 登录相关 ////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////// private NetSDKLib.NET_DEVICEINFO_Ex deviceInfo = new NetSDKLib.NET_DEVICEINFO_Ex(); // 设备信息 private NetSDKLib.LLong m_hLoginHandle = new NetSDKLib.LLong(0); // 登录句柄 /** * login with high level 高安全级别登陆 */ public void loginWithHighLevel() { // 入参 NetSDKLib.NET_IN_LOGIN_WITH_HIGHLEVEL_SECURITY pstInParam = new NetSDKLib.NET_IN_LOGIN_WITH_HIGHLEVEL_SECURITY(); System.arraycopy(m_strIpAddr.getBytes(), 0, pstInParam.szIP, 0, m_strIpAddr.length()); // ip pstInParam.nPort = m_nPort; // port System.arraycopy(m_strUser.getBytes(), 0, pstInParam.szUserName, 0, m_strUser.length()); // username System.arraycopy(m_strPassword.getBytes(), 0, pstInParam.szPassword, 0, m_strPassword.length()); // password // 出参 NetSDKLib.NET_OUT_LOGIN_WITH_HIGHLEVEL_SECURITY pstOutParam = new NetSDKLib.NET_OUT_LOGIN_WITH_HIGHLEVEL_SECURITY(); // 执行登录 获取登录句柄 m_hLoginHandle = netSdk.CLIENT_LoginWithHighLevelSecurity(pstInParam, pstOutParam); if (m_hLoginHandle.longValue() == 0) { // 如果成功登录 获取到的句柄是非0的 System.err.printf("Login Device IpAddr[%s] Port[%d] Failed. %s\n", m_strIpAddr, m_nPort, ToolKits.getErrorCode()); } else { System.out.printf("Login Device IpAddr[%s] Port[%d] Succeed.\n", m_strIpAddr, m_nPort); deviceInfo = pstOutParam.stuDeviceInfo; // 获取设备信息 System.out.println("The Count of Device Channel: " + deviceInfo.byChanNum); } } /** * logout 退出 */ public void logout() { if (m_hLoginHandle.longValue() != 0) { netSdk.CLIENT_Logout(m_hLoginHandle); System.out.println("Logout Succeed."); } } //////////////////////////////////////// 订阅事件/退订 //////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////// // 智能事件订阅句柄 private NetSDKLib.LLong m_hAttachHandle = new NetSDKLib.LLong(0); // 智能事件订阅函数 private final NetSDKLib.fAnalyzerDataCallBack analyzerDataCallBack = TrafficRadarAnalyzerDataCB.getSingleInstance(); // 报警事件订阅函数 private final NetSDKLib.fMessCallBackEx1 messageCallBack = NoPicListenMessageCB.getSingleInstance(); private int channel = 0; // 通道选择 // 选择通道 public void setChannelID() { System.out.println("请输入订阅通道,-1 表示全部."); Scanner sc = new Scanner(System.in); this.channel = sc.nextInt(); } /** * 订阅一般报警事件 */ public void AttachEventStartListen() { // 一般报警不需要指定通道,自动全通道订阅 boolean bRet = netSdk.CLIENT_StartListenEx(m_hLoginHandle); if (bRet) { System.out.println("CLIENT_StartListenEx Succeed."); } else { System.err.printf("CLIENT_StartListenEx fail, error:%s\n", ToolKits.getErrorCode()); } } /** * 退订一般报警事件 */ public void DetachEventStopListen() { boolean bRet = netSdk.CLIENT_StopListen(m_hLoginHandle); if (bRet) { System.out.println("CLIENT_StopListen succeed"); } else { System.err.printf("CLIENT_StopListen fail, error:%s\n", ToolKits.getErrorCode()); } } /////////////////////////////////////// 简易控制台 /////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////// // 初始化测试 public void InitTest() { TrafficRadarUtils.Init(); // 初始化SDK库 // 注册报警一般事件回调函数 回调函数必须保证不被JVM回收 推荐写成静态单例 dwUser可以不填 也不推荐使用 // 事件订阅时需要传登录句柄 回调函数会回传获该句柄 回调的数据还会包含通道 可以依据这两者建立事件和设备、通道的映射关系 netSdk.CLIENT_SetDVRMessCallBackEx1(messageCallBack, null); this.loginWithHighLevel(); // 高安全登录 推荐使用 部分旧设备可能不支持 } // 加载测试内容 public void RunTest() { CaseMenu menu = new CaseMenu(); menu.addItem(new CaseMenu.Item(this, "选择通道", "setChannelID")); menu.addItem(new CaseMenu.Item(this, "订阅报警事件任务(StartListen)", "AttachEventStartListen")); menu.addItem(new CaseMenu.Item(this, "退订报警事件任务(StopListen)", "DetachEventStopListen")); menu.run(); } // 结束测试 public void EndTest() { System.out.println("End Test"); this.logout(); // 退出 System.out.println("See You..."); TrafficRadarUtils.cleanAndExit(); // 清理资源并退出 } /////////////// 配置登陆地址,端口,用户名,密码 //////////////////////// // private String m_strIpAddr = "192.168.3.244"; private String m_strIpAddr = "172.31.3.143"; private int m_nPort = 37777; private String m_strUser = "admin"; private String m_strPassword = "admin123"; ////////////////////////////////////////////////////////////////////// public static void main(String[] args) { NoPicLitsenDemo demo = new NoPicLitsenDemo(); if (args.length == 4) { demo.m_strIpAddr = args[0]; demo.m_nPort = Integer.parseInt(args[1]); demo.m_strUser = args[2]; demo.m_strPassword = args[3]; } demo.InitTest(); demo.RunTest(); demo.EndTest(); } }