1
zhanghua
2024-09-26 c775c6953d9759e70f08acbfa8f6d7490aaae3d1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
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();
    }
}