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
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
package com.netsdk.demo.customize.securityCheck;
 
 
import com.netsdk.demo.util.CaseMenu;
import com.netsdk.lib.NetSDKLib;
import com.netsdk.lib.ToolKits;
import com.netsdk.lib.callback.securityCheck.SecurityGateAttachAlarmStatisticsCallBack;
import com.netsdk.lib.structure.NET_IN_SECURITYGATE_ATTACH_ALARM_STATISTICS;
import com.netsdk.lib.structure.NET_OUT_SECURITYGATE_ATTACH_ALARM_STATISTICS;
import com.sun.jna.Memory;
import com.sun.jna.Pointer;
import com.sun.jna.ptr.IntByReference;
 
import java.io.File;
import java.util.UUID;
 
import static com.netsdk.lib.Utils.getOsPrefix;
/**
 * @author 291189
 * @version 1.0
 * @description 安全门报警订阅和统计信息
 * @date 2021/6/29
 */
public class ShSecurityCheckDemo {
    /**
 
     10.35.232.160 安检门环境
     admin  admin123
 
     安检机 10.35.233.144
     admin  admin123
 
     */
 
    // 配置登陆地址,端口,用户名,密码
 
    private String m_strIp                     = "10.35.232.160";
    private int    m_nPort                     = 37777;
    private String m_strUser                 = "admin";
    private String m_strPassword             = "admin123";
 
    static NetSDKLib netSdk = NetSDKLib.NETSDK_INSTANCE;
    static NetSDKLib configApi = NetSDKLib.CONFIG_INSTANCE;
 
 
   // public static final NetSDKLib netSdk = NetSDKLib.NETSDK_INSTANCE;
    // 登陆句柄
    private static NetSDKLib.LLong loginHandle = new NetSDKLib.LLong(0);
 
    // 订阅句柄
    private static NetSDKLib.LLong AttachHandle = new NetSDKLib.LLong(0);
 
    // 设备信息扩展
    private NetSDKLib.NET_DEVICEINFO_Ex deviceInfo = new NetSDKLib.NET_DEVICEINFO_Ex();
 
    /**
     * 设备断线回调
     */
    private static class DisconnectCallback implements NetSDKLib.fDisConnect {
        private static ShSecurityCheckDemo.DisconnectCallback instance = new ShSecurityCheckDemo.DisconnectCallback();
 
        private DisconnectCallback() {
        }
 
        public static ShSecurityCheckDemo.DisconnectCallback getInstance() {
            return instance;
        }
 
        public void invoke(NetSDKLib.LLong lLoginID, String pchDVRIP, int nDVRPort, Pointer dwUser) {
            System.out.printf("Device[%s:%d] Disconnect!\n", pchDVRIP, nDVRPort);
        }
    }
    /**
     * 设备重连回调
     */
    private static class HaveReconnectCallback implements NetSDKLib.fHaveReConnect {
        private static ShSecurityCheckDemo.HaveReconnectCallback instance = new ShSecurityCheckDemo.HaveReconnectCallback();
 
        private HaveReconnectCallback() {
        }
 
        public static ShSecurityCheckDemo.HaveReconnectCallback getInstance() {
            return instance;
        }
 
        public void invoke(NetSDKLib.LLong lLoginID, String pchDVRIP, int nDVRPort, Pointer dwUser) {
            System.out.printf("Device[%s:%d] HaveReconnected!\n", pchDVRIP, nDVRPort);
        }
    }
 
 
    public void InitTest(){
        // 初始化SDK库
        netSdk.CLIENT_Init(ShSecurityCheckDemo.DisconnectCallback.getInstance(), null);
 
        // 设置断线重连成功回调函数
        netSdk.CLIENT_SetAutoReconnect(ShSecurityCheckDemo.HaveReconnectCallback.getInstance(), null);
 
        //打开日志,可选0
        NetSDKLib.LOG_SET_PRINT_INFO setLog = new NetSDKLib.LOG_SET_PRINT_INFO();
        String logPath = new File(".").getAbsoluteFile().getParent() + File.separator + "sdk_log" + File.separator + "sdk.log";
        setLog.bSetFilePath = 1;
        System.arraycopy(logPath.getBytes(), 0, setLog.szLogFilePath, 0, logPath.getBytes().length);
        setLog.bSetPrintStrategy = 1;
        setLog.nPrintStrategy = 0;
        if (!netSdk.CLIENT_LogOpen(setLog)){
            System.err.println("Open SDK Log Failed!!!");
        }
 
        Login();
    }
    public void Login(){
 
        // 登陆设备
        int nSpecCap = NetSDKLib.EM_LOGIN_SPAC_CAP_TYPE.EM_LOGIN_SPEC_CAP_TCP;    // TCP登入
        IntByReference nError = new IntByReference(0);
        loginHandle = netSdk.CLIENT_LoginEx2(m_strIp, m_nPort, m_strUser,
                m_strPassword ,nSpecCap, null, deviceInfo, nError);
        if (loginHandle.longValue() != 0) {
            System.out.printf("Login Device[%s] Success!\n", m_strIp);
        }
        else {
            System.err.printf("Login Device[%s] Fail.Error[%s]\n", m_strIp, ToolKits.getErrorCode());
            LoginOut();
        }
    }
 
    public void LoginOut(){
        System.out.println("End Test");
        if( loginHandle.longValue() != 0)
        {
            netSdk.CLIENT_Logout(loginHandle);
        }
        System.out.println("See You...");
 
        netSdk.CLIENT_Cleanup();
        System.exit(0);
    }
 
 
    // 编码格式
    public static String encode;
 
    static {
        String osPrefix = getOsPrefix();
        if (osPrefix.toLowerCase().startsWith("win64-amd64")) {
            encode = "GBK";
        } else if (osPrefix.toLowerCase().startsWith("linux-amd64")) {
            encode = "UTF-8";
        }
    }
 
 
    /**
     * 订阅安全门报警统计信息接口
     */
    public void attachDadarAlarmInfo() {
 
        //入参
        NET_IN_SECURITYGATE_ATTACH_ALARM_STATISTICS net_in_securitygate_attach_alarm_statistics=new NET_IN_SECURITYGATE_ATTACH_ALARM_STATISTICS();
 
        UUID uuid= UUID.randomUUID();
        byte[] szUUID = net_in_securitygate_attach_alarm_statistics.szUUID;
 
        String numbers =uuid.toString();
        //beda31a3-a7b5-4126-81b9-6e67402b7b0c?
        int i = numbers.lastIndexOf("-");
 
        String[] split = numbers.split("-");
        //UUID算法(8-4-4-16格式)
 
        numbers=split[0]+"-"+split[1]+""+split[2]+"-"+split[3]+split[4];
 
        System.arraycopy(numbers.getBytes(), 0, szUUID, 0, numbers.getBytes().length);
 
        net_in_securitygate_attach_alarm_statistics.szUUID=szUUID;
 
        Pointer user=new Memory(1024);
        net_in_securitygate_attach_alarm_statistics.dwUser=user;
        net_in_securitygate_attach_alarm_statistics.cbNotify= SecurityGateAttachAlarmStatisticsCallBack.getInstance();
        Pointer pInParam=new Memory(net_in_securitygate_attach_alarm_statistics.size());
        ToolKits.SetStructDataToPointer(net_in_securitygate_attach_alarm_statistics, pInParam, 0);
 
        //出参
 
        NET_OUT_SECURITYGATE_ATTACH_ALARM_STATISTICS net_out_securitygate_attach_alarm_statistics=
                new NET_OUT_SECURITYGATE_ATTACH_ALARM_STATISTICS();
 
        Pointer pOutParam=new Memory(net_out_securitygate_attach_alarm_statistics.size());
        ToolKits.SetStructDataToPointer(net_out_securitygate_attach_alarm_statistics, pOutParam, 0);
 
        AttachHandle
                = netSdk.CLIENT_SecurityGateAttachAlarmStatistics(loginHandle, pInParam,
                pOutParam, 5000);
 
        if(AttachHandle.longValue() == 0) {
            System.out.printf("SecurityGateAttachAlarmStatistics fail, ErrCode=%x\n", netSdk.CLIENT_GetLastError() );
        }else {
            System.out.println("SecurityGateAttachAlarmStatistics success");
        }
    }
 
 
 
    public void RunTest()
    {
        System.out.println("Run Test");
        CaseMenu menu = new CaseMenu();
        menu.addItem(new CaseMenu.Item(this , "attachDadarAlarmInfo" , "attachDadarAlarmInfo"));
        menu.run();
    }
 
 
 
 
    public static  void main(String[] args){
        ShSecurityCheckDemo shSecurityCheckDemo=new ShSecurityCheckDemo();
        shSecurityCheckDemo.InitTest();
        shSecurityCheckDemo.RunTest();
        shSecurityCheckDemo.LoginOut();
 
    }
 
 
 
}