package com.netsdk.demo.customize.querySystemState; import com.netsdk.demo.customize.queryFaceDetection.QueryFaceDetectionUtils; import com.netsdk.demo.util.CaseMenu; import com.netsdk.lib.NetSDKLib; import com.netsdk.lib.ToolKits; import com.netsdk.lib.structure.*; import com.sun.jna.Memory; import com.sun.jna.NativeLong; import com.sun.jna.Pointer; import java.io.UnsupportedEncodingException; /** * className:QuerySystemState * description: * author:251589 * createTime:2021/2/25 14:37 * * @version v1.0 */ public class QuerySystemStateDemo { // The constant net sdk public static final NetSDKLib netSDK = NetSDKLib.NETSDK_INSTANCE; // The constant config sdk. public static NetSDKLib configSDK = NetSDKLib.CONFIG_INSTANCE; ////////////////////////////////////// 登录相关 /////////////////////////////// private NetSDKLib.NET_DEVICEINFO_Ex deviceInfo = new NetSDKLib.NET_DEVICEINFO_Ex(); // 设备信息 private NetSDKLib.LLong loginHandle = new NetSDKLib.LLong(0); // 登录句柄 /** * 登录设备 * * @return */ // public boolean login() { // System.out.println("Function: Login Device." + ip); // final int tcpSpecCap = 0; // final IntByReference errorReference = new IntByReference(0); // final NetSDKLib.NET_DEVICEINFO deviceinfo = new NetSDKLib.NET_DEVICEINFO(); // loginHandle = netSDK.CLIENT_LoginEx(ip, port, username, password, tcpSpecCap, null, deviceinfo, errorReference); // if (loginHandle.longValue() == 0) { // System.err.println("Failed to Login " + ip + getErrorCode()); // return false; // } // System.out.println("Success to Login " + ip); // return true; // } /** * login with high level 高安全级别登陆 */ public void loginWithHighLevel() { NetSDKLib.NET_IN_LOGIN_WITH_HIGHLEVEL_SECURITY pstlnParam = new NetSDKLib.NET_IN_LOGIN_WITH_HIGHLEVEL_SECURITY() {{ szIP = ip.getBytes(); nPort = port; szUserName = username.getBytes(); szPassword = password.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() == 0L) { System.err.printf("Login Device[%s] Port[%d]Failed. %s\n", ip, port, netSDK.CLIENT_GetLastError()); } else { deviceInfo = pstOutParam.stuDeviceInfo; // 获取设备信息 System.out.println("Login Success"); System.out.println("Device Address:" + ip); System.out.println("设备包含:" + deviceInfo.byChanNum + "个通道"); } } /** * logout 退出 */ public void logOut() { if (loginHandle.longValue() != 0L) { netSDK.CLIENT_Logout(loginHandle); System.out.println("LogOut Success"); } } public void querySystemStatus() { NET_SYSTEM_STATUS netSystemStatus = new NET_SYSTEM_STATUS(); // CPU 状态 NET_CPU_STATUS netCpuStatus = new NET_CPU_STATUS(); netCpuStatus.write(); // 内存状态 NET_MEMORY_STATUS netMemoryStatus = new NET_MEMORY_STATUS(); netMemoryStatus.write(); // 风扇状态 NET_FAN_STATUS netFanStatus = new NET_FAN_STATUS(); netFanStatus.write(); // 电源状态 NET_POWER_STATUS netPowerStatus = new NET_POWER_STATUS(); netPowerStatus.write(); // 温度状态 NET_TEMPERATURE_STATUS netTemperatureStatus = new NET_TEMPERATURE_STATUS(); netTemperatureStatus.write(); netSystemStatus.pstuCPU = netCpuStatus.getPointer(); netSystemStatus.pstuMemory = netMemoryStatus.getPointer(); netSystemStatus.pstuFan = netFanStatus.getPointer(); netSystemStatus.pstuPower = netPowerStatus.getPointer(); netSystemStatus.pstuTemp = netTemperatureStatus.getPointer(); netSystemStatus.write(); boolean ret = netSDK.CLIENT_QuerySystemStatus(loginHandle, netSystemStatus.getPointer(), 1000); if (ret) { System.out.println("查询成功!"); netSystemStatus.read(); netCpuStatus.read(); netMemoryStatus.read(); netFanStatus.read(); netPowerStatus.read(); netTemperatureStatus.read(); // cpu信息 System.out.println("cpu状态-> 数量: " + netCpuStatus.nCount + " 查询是否成功: " + netCpuStatus.bEnable); for (int i = 0; i < netCpuStatus.nCount; i++) { System.out.println("CPU使用率 :" + netCpuStatus.stuCPUs[i].nUsage); } // 内存信息 System.out.println("内存信息:" + netMemoryStatus.bEnable + " 总量: " + netMemoryStatus.stuMemory.dwTotal); // 电源、池信息 for (int i = 0; i < netPowerStatus.nCount; i++) { System.out.printf("电源[%d] 电源状态: %d, 电池状态: %d%n", i + 1, netPowerStatus.stuPowers[i].bPowerOn, netPowerStatus.stuBatteries[i].bCharging); } System.err.println("个数:" + netFanStatus.nCount); for (int i = 0; i < netFanStatus.nCount; i++) { try { System.err.println("stuFans: " + netFanStatus.stuFans[i].nSpeed + " 名称:" + new String(netFanStatus.stuFans[i].szName, "gbk")); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } System.out.println("温度信息:" + netTemperatureStatus.bEnable + " 数量: " + netTemperatureStatus.nCount); for (int i = 0; i < netTemperatureStatus.nCount; i++) { try { System.out.println("温度信息: " + netTemperatureStatus.stuTemps[i].fTemperature + new String(netTemperatureStatus.stuTemps[i].szName, "gbk")); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } } else { System.err.println("系统状态查询失败!!!" + netSDK.CLIENT_GetLastError()); } } /** * 报警信息回调函数原形,建议写成单例模式 */ private static class fAlarmDataCB implements NetSDKLib.fMessCallBack { private fAlarmDataCB() { } private static class fAlarmDataCBHolder { private static fAlarmDataCB callback = new fAlarmDataCB(); } public static fAlarmDataCB getCallBack() { return fAlarmDataCB.fAlarmDataCBHolder.callback; } public boolean invoke(int lCommand, NetSDKLib.LLong lLoginID, Pointer pStuEvent, int dwBufLen, String strDeviceIP, NativeLong nDevicePort, Pointer dwUser) { switch (lCommand) { case NetSDKLib.NET_DISKFULL_ALARM_EX: { // 硬盘满报警,数据为1个字节, System.out.println("硬盘满报警"); if (dwBufLen > 0) { byte[] channelState = pStuEvent.getByteArray(0, dwBufLen); // 将缓存pStuEvent的值,按byte[]输出 for (int i = 0; i < dwBufLen; i++) { System.out.print(" Channel[" + i + "] State = " + (channelState[i])); // 1为有硬盘满报警,0为无报警。 } } break; } case NetSDKLib.NET_DISKERROR_ALARM_EX: { System.out.println("坏硬盘报警"); byte[] msg = pStuEvent.getByteArray(0, dwBufLen); for (int i = 0; i < msg.length; i++) { System.out.print("channel : " + i + " state : " + msg[i]); // i : channel; } // msg[i] 1:alarm 0:no alarm break; } case NetSDKLib.NET_ALARM_RAID_STATE_EX: { System.out.println("RAID异常报警"); ALARM_RAID_INFO_EX msg = new ALARM_RAID_INFO_EX(); ToolKits.GetPointerData(pStuEvent, msg); System.out.println("错误类型: 0未知,1RAID错误,2RAID降级: " + msg.emErrorType); System.out.println("开始/结束,0开始,1结束: " + msg.nAction); break; } default: break; } return true; } } public void startListenAlarm() { // 设置报警回调函数 // netSDK.CLIENT_SetDVRMessCallBack(fAlarmDataCB.getCallBack(), null); // 向设备订阅报警--扩展 if (netSDK.CLIENT_StartListenEx(loginHandle)) { System.out.printf("CLIENT_StartListenEx Success\n"); } else { System.out.printf("CLIENT_StartListenEx Failed!LastError = %x\n", netSDK.CLIENT_GetLastError()); } } public void stopListenAlarm() { // 向设备停止报警--扩展 if (netSDK.CLIENT_StopListen(loginHandle)) { System.out.printf("CLIENT_StopListen Success\n"); } else { System.out.printf("CLIENT_StopListen Failed!LastError = %x\n", netSDK.CLIENT_GetLastError()); } } // 结束测试 public void endTest() { System.out.println("End Test"); this.logOut(); // 退出 System.out.println("See You..."); QueryFaceDetectionUtils.cleanAndExit(); // 清理资源并退出 } // 加载测试内容 public void runTest() { CaseMenu menu = new CaseMenu(); menu.addItem(new CaseMenu.Item(this, "查询系统状态", "querySystemStatus")); menu.addItem(new CaseMenu.Item(this, "事件监听", "startListenAlarm")); menu.addItem(new CaseMenu.Item(this, "退订", "stopListenAlarm")); menu.run(); } // 初始化测试 public void initTest() { QuerySystemStatusUtils.Init(); // 初始化SDK库 this.loginWithHighLevel(); // 高安全登录 } /////////////// 配置登陆地址,端口,用户名,密码 //////////////////////// private String ip = "171.35.0.25"; private int port = 37777; private String username = "admin"; private String password = "admin1234"; ////////////////////////////////////////////////////////////////////// public static void main(String[] args) { QuerySystemStateDemo demo = new QuerySystemStateDemo(); demo.initTest(); demo.runTest(); demo.endTest(); } }