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.AnalyzerDataCallBack;
|
import com.netsdk.lib.callback.securityCheck.NotifyPopulationStatisticsInfoCallBack;
|
import com.netsdk.lib.structure.NET_IN_ATTACH_GATE_POPULATION_STATISTICS_INFO;
|
import com.netsdk.lib.structure.NET_IN_GET_POPULATION_STATISTICS;
|
import com.netsdk.lib.structure.NET_OUT_ATTACH_GATE_POPULATION_STATISTICS_INFO;
|
import com.netsdk.lib.structure.NET_OUT_GET_POPULATION_STATISTICS;
|
import com.sun.jna.Memory;
|
import com.sun.jna.Pointer;
|
|
import java.io.File;
|
|
import static com.netsdk.lib.Utils.getOsPrefix;
|
|
/**
|
* @author 291189
|
* @version 1.0
|
* @description 安全门功能demo
|
* @date 2021/7/05
|
*/
|
public class SafetyCheckDemo {
|
/**
|
|
10.35.232.160 admin admin123
|
|
*/
|
private String m_strIpAddr = "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 static NetSDKLib.LLong m_hAttachHandle = new NetSDKLib.LLong(0);
|
|
// 设备信息扩展
|
private NetSDKLib.NET_DEVICEINFO_Ex deviceInfo = new NetSDKLib.NET_DEVICEINFO_Ex();
|
|
/**
|
* 设备断线回调
|
*/
|
private static class DisconnectCallback implements NetSDKLib.fDisConnect {
|
private static DisconnectCallback instance = new DisconnectCallback();
|
|
private DisconnectCallback() {
|
}
|
|
public static 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 HaveReconnectCallback instance = new HaveReconnectCallback();
|
|
private HaveReconnectCallback() {
|
}
|
|
public static 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(DisconnectCallback.getInstance(), null);
|
|
// 设置断线重连成功回调函数
|
netSdk.CLIENT_SetAutoReconnect(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!!!");
|
}
|
|
loginWithHighLevel();
|
}
|
/**
|
* 高安全登录
|
*/
|
public void loginWithHighLevel() {
|
// 输入结构体参数
|
NetSDKLib.NET_IN_LOGIN_WITH_HIGHLEVEL_SECURITY pstlnParam = new NetSDKLib.NET_IN_LOGIN_WITH_HIGHLEVEL_SECURITY() {
|
{
|
szIP = m_strIpAddr.getBytes();
|
nPort = m_nPort;
|
szUserName = m_strUser.getBytes();
|
szPassword = m_strPassword.getBytes();
|
}
|
};
|
|
// 输出结构体参数
|
NetSDKLib.NET_OUT_LOGIN_WITH_HIGHLEVEL_SECURITY pstOutParam = new NetSDKLib.NET_OUT_LOGIN_WITH_HIGHLEVEL_SECURITY();
|
|
// 写入sdk
|
loginHandle = netSdk.CLIENT_LoginWithHighLevelSecurity(pstlnParam, pstOutParam);
|
if (loginHandle.longValue() == 0) {
|
System.err.printf("Login Device[%s] Port[%d]Failed. %s\n", m_strIpAddr, m_nPort,
|
netSdk.CLIENT_GetLastError());
|
} else {
|
deviceInfo = pstOutParam.stuDeviceInfo; // 获取设备信息
|
System.out.println("Login Success");
|
System.out.println("Device Address:" + m_strIpAddr);
|
System.out.println("设备包含:" + deviceInfo.byChanNum + "个通道");
|
}
|
}
|
|
/**
|
* 退出清理环境
|
*/
|
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";
|
}
|
}
|
|
// CLIENT_AttachPopulationStatistics
|
// 订阅安检门人数变化信息,pstInParam与pstOutParam内存由用户申请释放
|
// CLIENT_NET_API LLONG CALL_METHOD CLIENT_AttachPopulationStatistics(LLONG lLoginID, NET_IN_ATTACH_GATE_POPULATION_STATISTICS_INFO* pstInParam, NET_OUT_ATTACH_GATE_POPULATION_STATISTICS_INFO* pstOutParam , int nWaitTime);
|
|
public void AttachPopulationStatistics(){
|
// 先退订,设备不会对重复订阅作校验,重复订阅后会有重复的事件返回
|
DetachPopulationStatistics();
|
//入参
|
NET_IN_ATTACH_GATE_POPULATION_STATISTICS_INFO inParam=new NET_IN_ATTACH_GATE_POPULATION_STATISTICS_INFO();
|
|
Pointer user=new Memory(1024);
|
inParam.dwUser=user;
|
inParam.cbNotifyPopulationStatisticsInfo = NotifyPopulationStatisticsInfoCallBack.getInstance();
|
|
Pointer pInParam=new Memory(inParam.size());
|
|
ToolKits.SetStructDataToPointer(inParam, pInParam, 0);
|
|
//出参
|
NET_OUT_ATTACH_GATE_POPULATION_STATISTICS_INFO outParam=new NET_OUT_ATTACH_GATE_POPULATION_STATISTICS_INFO();
|
|
Pointer pOutParam=new Memory(outParam.size());
|
|
ToolKits.SetStructDataToPointer(outParam, pOutParam, 0);
|
////CLIENT_NET_API LLONG CALL_METHOD CLIENT_AttachPopulationStatistics(LLONG lLoginID, NET_IN_ATTACH_GATE_POPULATION_STATISTICS_INFO* pstInParam, NET_OUT_ATTACH_GATE_POPULATION_STATISTICS_INFO* pstOutParam , int nWaitTime);
|
AttachHandle= netSdk.CLIENT_AttachPopulationStatistics(loginHandle,pInParam,pOutParam,3000);
|
|
if (AttachHandle.longValue() != 0) {
|
System.out.println("CLIENT_AttachPopulationStatistics Success");
|
} else {
|
System.out.println("CLIENT_AttachPopulationStatistics Failed!LastError = %s\n"+ToolKits.getErrorCode());
|
}
|
}
|
|
// 取消订阅安检门人数变化信息
|
public void DetachPopulationStatistics(){
|
if (AttachHandle.longValue() != 0) {
|
netSdk.CLIENT_DetachPopulationStatistics(AttachHandle);
|
}
|
|
}
|
// 获取安检门人数统计信息
|
//CLIENT_NET_API BOOL CALL_METHOD CLIENT_GetPopulationStatistics(LLONG lLoginID, const NET_IN_GET_POPULATION_STATISTICS *pInParam, NET_OUT_GET_POPULATION_STATISTICS *pOutParam, int nWaitTime);
|
//public boolean CLIENT_GetPopulationStatistics(NetSDKLib.LLong lLoginID, Pointer pstInParam, Pointer pstOutParam, int nWaitTime);
|
|
public void GetPopulationStatistics(){
|
//入参
|
NET_IN_GET_POPULATION_STATISTICS inParam=new NET_IN_GET_POPULATION_STATISTICS();
|
|
Pointer pInParam=new Memory(inParam.size());
|
|
ToolKits.SetStructDataToPointer(inParam, pInParam, 0);
|
|
//出参
|
NET_OUT_GET_POPULATION_STATISTICS msg=new NET_OUT_GET_POPULATION_STATISTICS();
|
|
Pointer pOutParam=new Memory(msg.size());
|
|
ToolKits.SetStructDataToPointer(msg, pOutParam, 0);
|
|
//CLIENT_NET_API BOOL CALL_METHOD CLIENT_GetPopulationStatistics(LLONG lLoginID, const NET_IN_GET_POPULATION_STATISTICS *pInParam, NET_OUT_GET_POPULATION_STATISTICS *pOutParam, int nWaitTime);
|
|
boolean DoFind = netSdk.CLIENT_GetPopulationStatistics(loginHandle, pInParam, pOutParam, 3000);
|
|
if(!DoFind){
|
System.err.printf("Do Find PopulationStatistics.Error[%s]\n", ToolKits.getErrorCode());
|
return;
|
}
|
|
ToolKits.GetPointerData(pOutParam, msg);
|
|
int nPassPopulation = msg.nPassPopulation; // 正向通过人数
|
|
System.out.println("正向通过人数:"+nPassPopulation);
|
|
int nMetalAlarmPopulation = msg.nMetalAlarmPopulation;
|
|
System.out.println("正向触发金属报警人数:"+nMetalAlarmPopulation);
|
|
int nReversePassPopulation = msg.nReversePassPopulation;
|
|
System.out.println("反向通过人数:"+nReversePassPopulation);
|
|
int nReverseMetalAlarmPopulation = msg.nReverseMetalAlarmPopulation;
|
|
System.out.println("反向触发金属报警人数:"+nReverseMetalAlarmPopulation);
|
|
long nTempNormalPopulation = msg.nTempNormalPopulation;
|
|
System.out.println("体温正常人数:"+nTempNormalPopulation);
|
|
long nTempAlarmPopulation = msg.nTempAlarmPopulation;
|
|
System.out.println("体温异常人数:"+nTempAlarmPopulation);
|
|
}
|
|
/**
|
* 订阅智能分析数据
|
*/
|
public void realLoadPicture() {
|
int bNeedPicture = 1; // 是否需要图片
|
int ChannelId = 0; // -1代表全通道
|
|
m_hAttachHandle = netSdk.CLIENT_RealLoadPictureEx(loginHandle, ChannelId, NetSDKLib.EVENT_IVS_SECURITYGATE_PERSONALARM,
|
bNeedPicture , AnalyzerDataCallBack.getInstance() , null , null);
|
if(m_hAttachHandle.longValue() != 0) {
|
System.out.println("智能订阅成功.");
|
} else {
|
System.err.println("智能订阅失败." + ToolKits.getErrorCode());
|
return;
|
}
|
}
|
|
/**
|
* 停止侦听智能事件
|
*/
|
public void DetachEventRealLoadPic() {
|
if (m_hAttachHandle.longValue() != 0) {
|
netSdk.CLIENT_StopLoadPic(m_hAttachHandle);
|
}
|
}
|
public void RunTest()
|
{
|
System.out.println("Run Test");
|
CaseMenu menu = new CaseMenu();
|
menu.addItem(new CaseMenu.Item(this , "订阅安检门人数变化信息" , "AttachPopulationStatistics"));
|
menu.addItem(new CaseMenu.Item(this , "取消订阅安检门人数变化信息" , "DetachPopulationStatistics"));
|
menu.addItem((new CaseMenu.Item(this , "获取安检门人数统计信息" , "GetPopulationStatistics")));
|
menu.addItem((new CaseMenu.Item(this , "订阅智能分析数据" , "realLoadPicture")));
|
menu.addItem((new CaseMenu.Item(this , "取消实时智能分析数据" , "DetachEventRealLoadPic")));
|
menu.run();
|
}
|
|
public static void main(String[] args){
|
SafetyCheckDemo safetyCheckDemo=new SafetyCheckDemo();
|
safetyCheckDemo.InitTest();
|
safetyCheckDemo.RunTest();
|
safetyCheckDemo.LoginOut();
|
|
}
|
}
|