package com.netsdk.demo.example.parkingDemo.callback; import com.netsdk.lib.NetSDKLib; import com.netsdk.lib.ToolKits; import com.sun.jna.NativeLong; import com.sun.jna.Pointer; import java.io.UnsupportedEncodingException; import static com.netsdk.lib.Utils.getOsPrefix; /** * @author : 47040 * @since : Created in 2020/7/21 16:14 */ public class DefaultMessageCallBack implements NetSDKLib.fMessCallBackEx1 { private static DefaultMessageCallBack singleInstance; public static DefaultMessageCallBack getSingleInstance() { if (singleInstance == null) { singleInstance = new DefaultMessageCallBack(); } return singleInstance; } 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"; } } @Override public boolean invoke(int lCommand, NetSDKLib.LLong lLoginID, Pointer pStuEvent, int dwBufLen, String strDeviceIP, NativeLong nDevicePort, int bAlarmAckFlag, NativeLong nEventID, Pointer dwUser) { switch (lCommand) { case NetSDKLib.NET_ALARM_TRAFFIC_PARKING_TIMEOUT: { System.out.println(" TRAFFIC [ PARKING TIMEOUT ]"); // 能展示事件内容:【事件名称】,事件发生时间,车牌号,【车位号】,驶入时间,停车时长 NetSDKLib.ALARM_TRAFFIC_PARKING_TIMEOUT_INFO stuParkingTimeoutInfo = new NetSDKLib.ALARM_TRAFFIC_PARKING_TIMEOUT_INFO(); ToolKits.GetPointerDataToStruct(pStuEvent, 0, stuParkingTimeoutInfo); String timeoutEventTime = stuParkingTimeoutInfo.UTC.toString(); String timeoutInPartTime = stuParkingTimeoutInfo.stuInParkTime.toString(); String timeoutOutPartTime = stuParkingTimeoutInfo.stuOutParkTime.toString(); int timeoutParkingTime = stuParkingTimeoutInfo.nParkingTime; String timeoutPlatNumber = null; try { timeoutPlatNumber = new String(stuParkingTimeoutInfo.stuTrafficCar.szPlateNumber, encode).trim(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } StringBuilder timeoutInfo = new StringBuilder() .append("<<------停车超时事件------>>").append("\n") .append("发生时间: ").append(timeoutEventTime).append("\n") .append("进场时间: ").append(timeoutInPartTime).append("\n") .append("出场时间: ").append(timeoutOutPartTime).append("\n") .append("停车时长: ").append(timeoutParkingTime).append("\n") .append("车牌名: ").append(timeoutPlatNumber); System.out.println(timeoutInfo.toString()); break; } case NetSDKLib.NET_ALARM_TRAFFIC_SUSPICIOUSCAR: { System.out.println(" TRAFFIC [ SUSPICIOUS CAR ]"); // 能展示报警内容:【事件名称】,【时间】,车辆信息(车位号、车牌)。 NetSDKLib.ALARM_TRAFFIC_SUSPICIOUSCAR_INFO stuSuspiciousInfo = new NetSDKLib.ALARM_TRAFFIC_SUSPICIOUSCAR_INFO(); ToolKits.GetPointerDataToStruct(pStuEvent, 0, stuSuspiciousInfo); // 车主姓名 String suspiciousPlateNumber = null; // 车牌号码 try { // 车主姓名 suspiciousPlateNumber = new String(stuSuspiciousInfo.stuCarInfo.szPlateNumber, encode).trim(); // 车牌号码 } catch (UnsupportedEncodingException e) { e.printStackTrace(); } StringBuilder suspiciousMainInfo = new StringBuilder() .append("<<------嫌疑车辆上报事件------>>").append("\n") .append("车牌号码: ").append(suspiciousPlateNumber); System.out.println(suspiciousMainInfo.toString()); break; } case NetSDKLib.NET_ALARM_PARKING_LOT_STATUS_DETECTION: { System.out.println(" TRAFFIC [ PARKING LOT STATUS DETECTION ]"); // 能展示巡检事件内容 + ParkingStatus下的所有信息 /////////////// 停车位状态主要信息 NetSDKLib.ALARM_PARKING_LOT_STATUS_DETECTION stuPLSDetection = new NetSDKLib.ALARM_PARKING_LOT_STATUS_DETECTION(); ToolKits.GetPointerDataToStruct(pStuEvent, 0, stuPLSDetection); String plsSzName = new String(stuPLSDetection.szName).trim(); String plsTime = stuPLSDetection.UTC.toString(); int plsStatusNum = stuPLSDetection.nParkingStatusNum; StringBuilder plsDetectMainInfo = new StringBuilder() .append("<<------停车位状态检测事件------>>").append("\n") .append("事件名: ").append(plsSzName).append("\n") .append("发生时间: ").append(plsTime).append("\n") .append("室外停车位个数: ").append(plsStatusNum); System.out.println(plsDetectMainInfo.toString()); ////////////// 每个停车位信息 StringBuilder plsDetectDetailInfo = new StringBuilder() .append("<<------每个停车位信息------>>"); for (int i = 0; i < stuPLSDetection.nParkingStatusNum; i++) { try { plsDetectDetailInfo.append("\n").append("第 ").append(i+1).append(" 个停车位信息") .append("\n").append("车位名称: ").append(new String(stuPLSDetection.stuParkingStatus[i].szName, encode).trim()) .append("\n").append("车位ID: ").append(stuPLSDetection.stuParkingStatus[i].nID) .append("\n").append("车位内已停车位数量: ").append(stuPLSDetection.stuParkingStatus[i].nParkedNumber) .append("\n").append("相对上次上报的变化状态: ").append(stuPLSDetection.stuParkingStatus[i].emChangeStatus); // 参考 EM_PARKING_NUMBER_CHANGE_STATUS } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } System.out.println(plsDetectDetailInfo.toString()); } default: break; } return true; } }