package com.netsdk.demo.example.parkingDemo;
|
|
import com.netsdk.demo.example.parkingDemo.callback.DefaultAnalyzerDataCallBack;
|
import com.netsdk.demo.util.CaseMenu;
|
import com.netsdk.lib.NetSDKLib;
|
import com.netsdk.lib.ToolKits;
|
|
import java.io.UnsupportedEncodingException;
|
import java.util.Scanner;
|
|
import static com.netsdk.lib.Utils.getOsPrefix;
|
|
/**
|
* @author : 47040
|
* @since : Created in 2020/7/20 16:28
|
*/
|
public class ParkingImageEventDemo {
|
|
// The constant net sdk
|
public static final NetSDKLib netsdk = NetSDKLib.NETSDK_INSTANCE;
|
|
// The constant config sdk.
|
public static NetSDKLib configsdk = NetSDKLib.CONFIG_INSTANCE;
|
|
public static String encode;
|
|
static {
|
String osPrefix = getOsPrefix();
|
if (osPrefix.toLowerCase().startsWith("win32-amd64")) {
|
encode = "GBK";
|
} else if (osPrefix.toLowerCase().startsWith("linux-amd64")) {
|
encode = "UTF-8";
|
}
|
}
|
|
////////////////////////////////////// 登录相关 ///////////////////////////////
|
//////////////////////////////////////////////////////////////////////////////
|
|
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 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
|
m_hLoginHandle = netsdk.CLIENT_LoginWithHighLevelSecurity(pstlnParam, pstOutParam);
|
|
if (m_hLoginHandle.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 + "个通道");
|
}
|
}
|
|
/**
|
* logout 退出
|
*/
|
public void logOut() {
|
if (m_hLoginHandle.longValue() != 0) {
|
netsdk.CLIENT_Logout(m_hLoginHandle);
|
System.out.println("LogOut Success");
|
}
|
}
|
|
//////////////////////////////////////// 订阅事件/退订 ///////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////
|
|
private NetSDKLib.LLong m_hAttachHandle = new NetSDKLib.LLong(0); // 订阅相关
|
|
private NetSDKLib.fAnalyzerDataCallBack analyzerDataCB = DefaultAnalyzerDataCallBack.getSingleInstance();
|
|
private int channel = 0;
|
|
public void setChannelID() {
|
Scanner sc = new Scanner(System.in);
|
this.channel = sc.nextInt();
|
}
|
|
public void AttachEventRealLoadPic() {
|
|
this.DetachEventRealLoadPic(); // 先退订,设备不会对重复订阅作校验,重复订阅后会有重复的事件返回
|
|
int bNeedPicture = 1; // 需要图片
|
|
m_hAttachHandle = netsdk.CLIENT_RealLoadPictureEx(m_hLoginHandle, channel, NetSDKLib.EVENT_IVS_ALL, bNeedPicture, analyzerDataCB, null, null);
|
if (m_hAttachHandle.longValue() != 0) {
|
System.out.printf("Chn[%d] CLIENT_RealLoadPictureEx Success\n", channel);
|
} else {
|
System.out.printf("Ch[%d] CLIENT_RealLoadPictureEx Failed!LastError = %s\n", channel, ToolKits.getErrorCode());
|
}
|
}
|
|
/**
|
* 停止侦听智能事件
|
*/
|
public void DetachEventRealLoadPic() {
|
if (m_hAttachHandle.longValue() != 0) {
|
netsdk.CLIENT_StopLoadPic(m_hAttachHandle);
|
}
|
}
|
|
/////////////////////////////////////// RPC 接口 ////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////
|
|
/**
|
* 获取停车超时配置
|
*/
|
public void TestParkingTimeoutGetConfig() {
|
|
NetSDKLib.NET_CFG_PARKING_TIMEOUT_DETECT timeoutDetectConfig = new NetSDKLib.NET_CFG_PARKING_TIMEOUT_DETECT();
|
boolean ret = ParkingUtils.ParkingTimeoutGetConfig(m_hLoginHandle, timeoutDetectConfig);
|
if (!ret) return;
|
StringBuilder builder = new StringBuilder()
|
.append("<<-----Parking Timeout Config----->>").append("\n")
|
.append("bEnable: ").append(timeoutDetectConfig.bEnable).append("\n")
|
.append("nParkingTime: ").append(timeoutDetectConfig.nParkingTime);
|
System.out.println(builder.toString());
|
}
|
|
/**
|
* 设置停车超时配置
|
*/
|
public void TestParkingTimeoutSetConfig() {
|
|
NetSDKLib.NET_CFG_PARKING_TIMEOUT_DETECT timeoutDetectConfig = new NetSDKLib.NET_CFG_PARKING_TIMEOUT_DETECT();
|
timeoutDetectConfig.bEnable = 1;
|
timeoutDetectConfig.nParkingTime = 302400;
|
ParkingUtils.ParkingTimeoutSetConfig(m_hLoginHandle, timeoutDetectConfig);
|
}
|
|
|
/**
|
* 手动抓图
|
*/
|
public void TestParkingSnapshot() {
|
|
NetSDKLib.NET_IN_SNAP_MNG_SHOT stuInBuf = new NetSDKLib.NET_IN_SNAP_MNG_SHOT();
|
stuInBuf.nChannel = channel;
|
stuInBuf.nTime = 1; // 连拍次数, 0表示停止抓拍,正数表示连续抓拍的张数
|
|
ParkingUtils.ParkingSnapshot(m_hLoginHandle, stuInBuf);
|
}
|
|
|
/**
|
* 下发车辆清理接口, 清除的车辆为 1 的“一位多车信息”中车辆(车位号,车牌号)
|
*/
|
public void TestRemoveParkingCarInfo() throws UnsupportedEncodingException {
|
NetSDKLib.NET_IN_REMOVE_PARKING_CAR_INFO stuInBuf = new NetSDKLib.NET_IN_REMOVE_PARKING_CAR_INFO();
|
NetSDKLib.DEV_OCCUPIED_WARNING_INFO stuParkingCarInfo = stuInBuf.stuParkingCarInfo;
|
|
byte[] szParkingNo = "P1".getBytes();
|
System.arraycopy(szParkingNo, 0, stuParkingCarInfo.szParkingNo, 0, szParkingNo.length);
|
|
// 设备会对以下的数据作严格校验,如果不存在会返回校验错误,另外务必注意编码格式 encode
|
|
stuParkingCarInfo.nPlateNumber = 3;
|
|
byte[] iSzPlatNumber1 = "皖SLV662".getBytes(encode);
|
System.arraycopy(iSzPlatNumber1, 0, stuParkingCarInfo.szPlateNumber[0].plateNumber, 0, iSzPlatNumber1.length);
|
byte[] iSzPlatNumber2 = "浙A826RW".getBytes(encode);
|
System.arraycopy(iSzPlatNumber2, 0, stuParkingCarInfo.szPlateNumber[1].plateNumber, 0, iSzPlatNumber2.length);
|
byte[] iSzPlatNumber3 = "沪C0M959".getBytes(encode);
|
System.arraycopy(iSzPlatNumber3, 0, stuParkingCarInfo.szPlateNumber[2].plateNumber, 0, iSzPlatNumber3.length);
|
|
ParkingUtils.RemoveParkingCarInfo(m_hLoginHandle, stuInBuf);
|
}
|
|
|
/////////////////////////////////////// 简易控制台 ///////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////////////////
|
|
// 初始化测试
|
public void InitTest() {
|
|
ParkingUtils.Init(); // 初始化SDK库
|
this.loginWithHighLevel(); // 高安全登录
|
}
|
|
// 加载测试内容
|
public void RunTest() {
|
CaseMenu menu = new CaseMenu();
|
menu.addItem(new CaseMenu.Item(this, "订阅任务", "AttachEventRealLoadPic"));
|
menu.addItem(new CaseMenu.Item(this, "退订任务", "DetachEventRealLoadPic"));
|
menu.addItem(new CaseMenu.Item(this, "选择通道", "setChannelID"));
|
menu.addItem(new CaseMenu.Item(this, "手动抓图", "TestParkingSnapshot"));
|
menu.addItem(new CaseMenu.Item(this, "获取停车超时配置", "TestParkingTimeoutGetConfig"));
|
menu.addItem(new CaseMenu.Item(this, "设置停车超时配置", "TestParkingTimeoutSetConfig"));
|
menu.addItem(new CaseMenu.Item(this, "下发车辆清理接口", "TestRemoveParkingCarInfo"));
|
menu.run();
|
}
|
|
// 结束测试
|
public void EndTest() {
|
System.out.println("End Test");
|
this.logOut(); // 退出
|
System.out.println("See You...");
|
|
ParkingUtils.cleanAndExit(); // 清理资源并退出
|
}
|
|
/////////////// 配置登陆地址,端口,用户名,密码 ////////////////////////
|
// private String m_strIpAddr = "172.24.0.118";
|
// private String m_strIpAddr = "171.2.7.212";
|
private String m_strIpAddr = "10.34.3.63";
|
// private String m_strIpAddr = "172.25.239.22";
|
// private String m_strIpAddr = "10.172.177.239";
|
// private int m_nPort = 37777;
|
private int m_nPort = 37778;
|
private String m_strUser = "admin";
|
// private String m_strPassword = "admin123";
|
private String m_strPassword = "admin";
|
//////////////////////////////////////////////////////////////////////
|
|
public static void main(String[] args) {
|
ParkingImageEventDemo demo = new ParkingImageEventDemo();
|
demo.InitTest();
|
demo.RunTest();
|
demo.EndTest();
|
}
|
|
}
|