package com.netsdk.demo.customize; import com.netsdk.demo.util.CaseMenu; import com.netsdk.lib.NetSDKLib; import com.netsdk.lib.ToolKits; import com.netsdk.lib.structure.*; import com.netsdk.lib.utils.Initialization; import com.sun.jna.Memory; import com.sun.jna.Native; import com.sun.jna.Pointer; import com.sun.jna.ptr.IntByReference; import java.io.File; import java.io.UnsupportedEncodingException; import static com.netsdk.lib.NetSDKLib.EVENT_IVS_REMOTE_APPROVAL_ALARM; import static com.netsdk.lib.enumeration.NET_EM_CFG_OPERATE_TYPE.NET_EM_CFG_FINANCIAL_CABINET_CONFIG; /** * @author 291189 * @version 1.0 * @description GIP220729030 自研业务库demo * @date 2022/8/10 10:23 */ public class VaultDoorStateDemo extends Initialization { int channel=-1; NetSDKLib.LLong attachHandle=new NetSDKLib.LLong(0); public void GetVaultDoorState(){ NET_IN_GET_VAULTDOOR_STATE_INFO input=new NET_IN_GET_VAULTDOOR_STATE_INFO(); Pointer pointerInput = new Memory(input.size()); pointerInput.clear(input.size()); ToolKits.SetStructDataToPointer(input, pointerInput, 0); NET_OUT_GET_VAULTDOOR_STATE_INFO outPut=new NET_OUT_GET_VAULTDOOR_STATE_INFO(); Pointer pointerOutput = new Memory(outPut.size()); pointerOutput.clear(outPut.size()); ToolKits.SetStructDataToPointer(outPut, pointerOutput, 0); boolean b = netSdk.CLIENT_GetVaultDoorState(loginHandle, pointerInput, pointerOutput, 5000); if(b){ System.out.printf(" CLIENT_GetVaultDoorState Success\n"); ToolKits.GetPointerDataToStruct(pointerOutput,0,outPut); Native.free(Pointer.nativeValue(pointerInput)); //清理内存 Pointer.nativeValue(pointerInput, 0); Native.free(Pointer.nativeValue(pointerOutput)); Pointer.nativeValue(pointerOutput, 0); System.out.println("emDoorState:"+ outPut.emDoorState); System.out.println("emLockState:"+ outPut.emLockState); }else { Native.free(Pointer.nativeValue(pointerInput)); //清理内存 Pointer.nativeValue(pointerInput, 0); //防止gc重复回收 Native.free(Pointer.nativeValue(pointerOutput)); Pointer.nativeValue(pointerOutput, 0); System.out.printf("CLIENT_GetVaultDoorState Failed!LastError = %s\n", ToolKits.getErrorCode()); } } public void GetFinancialCabinetState(){ NET_IN_GET_CABINET_STATE_INFO input=new NET_IN_GET_CABINET_STATE_INFO(); Pointer pointerInput = new Memory(input.size()); pointerInput.clear(input.size()); ToolKits.SetStructDataToPointer(input, pointerInput, 0); NET_OUT_GET_CABINET_STATE_INFO outPut=new NET_OUT_GET_CABINET_STATE_INFO(); Pointer pointerOutput = new Memory(outPut.size()); pointerOutput.clear(outPut.size()); ToolKits.SetStructDataToPointer(outPut, pointerOutput, 0); boolean b = netSdk.CLIENT_GetFinancialCabinetState(loginHandle, pointerInput, pointerOutput, 5000); if(b){ System.out.printf(" CLIENT_GetFinancialCabinetState Success\n"); ToolKits.GetPointerDataToStruct(pointerOutput,0,outPut); Native.free(Pointer.nativeValue(pointerInput)); //清理内存 Pointer.nativeValue(pointerInput, 0); //防止gc重复回收 Native.free(Pointer.nativeValue(pointerOutput)); Pointer.nativeValue(pointerOutput, 0); System.out.println("fTemperature:"+ outPut.fTemperature); System.out.println("fHumidity:"+ outPut.fHumidity); }else { Native.free(Pointer.nativeValue(pointerInput)); //清理内存 Pointer.nativeValue(pointerInput, 0); Native.free(Pointer.nativeValue(pointerOutput)); Pointer.nativeValue(pointerOutput, 0); System.out.printf("CLIENT_GetFinancialCabinetState Failed!LastError = %s\n", ToolKits.getErrorCode()); } } public void financialCabinetConfig(){ //获取 int emCfgOpType = NET_EM_CFG_FINANCIAL_CABINET_CONFIG; NET_CFG_FINANCIAL_CABINET_CONFIG_INFO msg=new NET_CFG_FINANCIAL_CABINET_CONFIG_INFO(); //入参 Pointer szOutBuffer =new Memory(msg.size()); szOutBuffer.clear(msg.size()); ToolKits.SetStructDataToPointer(msg, szOutBuffer, 0); boolean b=netSdk.CLIENT_GetConfig(loginHandle, emCfgOpType, -1, szOutBuffer, msg.size(), 3000, null); if(!b){ Native.free(Pointer.nativeValue(szOutBuffer)); //清理内存 Pointer.nativeValue(szOutBuffer, 0); System.out.printf("CLIENT_GetConfig Failed!LastError = %s\n", ToolKits.getErrorCode()); return; } System.out.printf(" CLIENT_GetConfig Success\n"); ToolKits.GetPointerDataToStruct(szOutBuffer,0,msg); Native.free(Pointer.nativeValue(szOutBuffer)); //清理内存 Pointer.nativeValue(szOutBuffer, 0); NET_FINANCIAL_CABINET_MESSAGE stuMobileMessage = msg.stuMobileMessage; System.out.println("bEnable:"+stuMobileMessage.bEnable); int nPhoneNumberNum = stuMobileMessage.nPhoneNumberNum; System.out.println("nPhoneNumberNum:"+nPhoneNumberNum); ByteSize16[] szPhoneNumber = stuMobileMessage.szPhoneNumber; for(int i=0;i0){ ToolKits.ByteArrZero(szPhoneNumber[0].byte16); String phone="18955652222"; ToolKits.StringToByteArray(phone,szPhoneNumber[0].byte16); } stuMobileMessage.bEnable=1; //下发 IntByReference restart = new IntByReference(0); Pointer szInBuffer =new Memory(msg.size()); szInBuffer.clear(msg.size()); ToolKits.SetStructDataToPointer(msg, szInBuffer, 0); boolean result=netSdk.CLIENT_SetConfig(loginHandle, emCfgOpType, -1, szInBuffer, msg.size(), 3000, restart, null); if(result) { Native.free(Pointer.nativeValue(szInBuffer)); //清理内存 Pointer.nativeValue(szInBuffer, 0); System.out.println("CLIENT_SetConfig success"); }else { Native.free(Pointer.nativeValue(szInBuffer)); //清理内存 Pointer.nativeValue(szInBuffer, 0); System.err.println("CLIENT_SetConfig field"); } } public NetSDKLib.LLong AttachEventRealLoadPic() { // 先退订,设备不会对重复订阅作校验,重复订阅后会有重复的事件返回 if(attachHandle.longValue()!=0){ this.DetachEventRealLoadPic(); } // 需要图片 int bNeedPicture = 1; attachHandle = netSdk.CLIENT_RealLoadPictureEx(loginHandle, channel, EVENT_IVS_REMOTE_APPROVAL_ALARM, bNeedPicture, AnalyzerDataCB.getInstance(), null, null); if (attachHandle.longValue() != 0) { System.out.printf("Chn[%d] CLIENT_RealLoadPictureEx Success\n", channel); } else { System.out.printf("Chn[%d] CLIENT_RealLoadPictureEx Failed!LastError = %s\n", channel, ToolKits.getErrorCode()); } return attachHandle; } /** * 报警事件(智能)回调 */ private static class AnalyzerDataCB implements NetSDKLib.fAnalyzerDataCallBack { private final File picturePath; private static AnalyzerDataCB instance; private AnalyzerDataCB() { picturePath = new File("./AnalyzerPicture/"); if (!picturePath.exists()) { picturePath.mkdirs(); } } public static AnalyzerDataCB getInstance() { if (instance == null) { synchronized (AnalyzerDataCB.class) { if (instance == null) { instance = new AnalyzerDataCB(); } } } return instance; } @Override public int invoke(NetSDKLib.LLong lAnalyzerHandle, int dwAlarmType, Pointer pAlarmInfo, Pointer pBuffer, int dwBufSize, Pointer dwUser, int nSequence, Pointer reserved) { if (lAnalyzerHandle == null || lAnalyzerHandle.longValue() == 0) { return -1; } switch (dwAlarmType) { case EVENT_IVS_REMOTE_APPROVAL_ALARM : {//金融远程审批事件 System.out.println(" 金融远程审批事件"); NET_DEV_EVENT_REMOTE_APPROVAL_ALARM_INFO msg=new NET_DEV_EVENT_REMOTE_APPROVAL_ALARM_INFO(); ToolKits.GetPointerData(pAlarmInfo, msg); // nChannelID /** 通道号 */ System.out.println("nChannelID:"+msg.nChannelID); /** 1:开始 2:停止 */ System.out.println("nAction:"+msg.nAction); try { /** 事件名称 */ System.out.println("szName UTF-8:"+new String(msg.szName,"UTF-8")); System.out.println("szName GBK:"+new String(msg.szName,"GBK")); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } /** 时间戳(单位是毫秒) */ System.out.println("PTS:"+msg.PTS); /** 事件发生的时间 */ System.out.println("UTC:"+msg.UTC); /** 事件ID */ System.out.println("nEventID:"+msg.nEventID); /** 审批单号 */ System.out.println("nApprovalNo:"+msg.nApprovalNo); /** 操作类型,-1:未知,0:存箱, 1:取箱 */ System.out.println("nType:"+msg.nType); /** 审批超时时间,单位秒 */ System.out.println("nTimeout:"+msg.nTimeout); /** 存取的舱位下标数量 */ System.out.println("nCabinListNum:"+msg.nCabinListNum); /** 存取的舱位下标数组 */ int[] nCabinList = msg.nCabinList; for(int i=0;i 0) { String picture = picturePath + "/" + System.currentTimeMillis() + "_info.jpg"; ToolKits.savePicture(pBuffer, image.nOffset, image.nLength, picture); } System.out.println("szPath:"+ new String(image.szPath)); } break; } default: System.out.println("其他事件--------------------"+ dwAlarmType); break; } return 0; } } /** * 停止侦听智能事件 */ public void DetachEventRealLoadPic() { if (this.attachHandle.longValue() != 0) { netSdk.CLIENT_StopLoadPic(this.attachHandle); } } public void RunTest() { System.out.println("Run Test"); CaseMenu menu = new CaseMenu();; menu.addItem((new CaseMenu.Item(this , "AttachEventRealLoadPic" , "AttachEventRealLoadPic"))); menu.addItem((new CaseMenu.Item(this , "DetachEventRealLoadPic" , "DetachEventRealLoadPic"))); menu.addItem((new CaseMenu.Item(this , "financialCabinetConfig" , "financialCabinetConfig"))); menu.addItem((new CaseMenu.Item(this , "GetFinancialCabinetState" , "GetFinancialCabinetState"))); menu.addItem((new CaseMenu.Item(this , "GetVaultDoorState" , "GetVaultDoorState"))); menu.run(); } public static void main(String[] args) { VaultDoorStateDemo vaultDoorStateDemo=new VaultDoorStateDemo(); InitTest("172.25.160.51",37777,"admin","admin123"); vaultDoorStateDemo.RunTest(); LoginOut(); } }