Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.

131 wiersze
6.1 KiB

  1. package com.netsdk.demo.module;
  2. import com.netsdk.lib.NetSDKLib;
  3. import com.netsdk.lib.ToolKits;
  4. import com.netsdk.lib.enumeration.DH_LOG_QUERY_TYPE;
  5. import com.netsdk.lib.structure.DH_DEVICE_LOG_ITEM_EX;
  6. import com.netsdk.lib.structure.NET_TIME;
  7. import com.netsdk.lib.structure.QUERY_DEVICE_LOG_PARAM;
  8. import com.sun.jna.Memory;
  9. import com.sun.jna.Pointer;
  10. import com.sun.jna.ptr.IntByReference;
  11. import java.nio.charset.Charset;
  12. public class DeviceLogModule {
  13. public static DH_DEVICE_LOG_ITEM_EX[] getSystemLog(NET_TIME startTime,NET_TIME endTime){
  14. //查询条件,作为入参
  15. QUERY_DEVICE_LOG_PARAM param=new QUERY_DEVICE_LOG_PARAM();
  16. //要查询的日志类型
  17. param.emLogType= DH_LOG_QUERY_TYPE.DHLOG_ALL.ordinal();
  18. //通道号
  19. param.nChannelID=0;
  20. //开始查询的条数
  21. param.nStartNum=0;
  22. //结束查询的条数,30-1+1=30,查询的条数是30条
  23. param.nEndNum=1024;
  24. int logNum=param.nEndNum-param.nStartNum+1;
  25. //日志数据结构体类型,写0 c层可能校验不通过,建议写1,使用DH_DEVICE_LOG_ITEM_EX作为日志数据的结构体,
  26. // 因为c层对出参buffer长度的校验是以DH_DEVICE_LOG_ITEM_EX结构体长度来校验的
  27. // 而DH_DEVICE_LOG_ITEM_EX结构体的长度比DH_DEVICE_LOG_ITEM结构体要长得多
  28. param.nLogStuType=1;
  29. //要查询的起始时间段
  30. param.stuStartTime= startTime;
  31. //要查询的结束时间段
  32. param.stuEndTime= endTime;
  33. //入参
  34. Pointer queryParam=new Memory(param.size());
  35. ToolKits.SetStructDataToPointer(param,queryParam,0);
  36. //日志数据结构体
  37. DH_DEVICE_LOG_ITEM_EX logBuffer=new DH_DEVICE_LOG_ITEM_EX();
  38. int totalSize = logBuffer.size() * logNum;
  39. //出参,分配内存
  40. Pointer pointer=new Memory(totalSize);
  41. pointer.clear(totalSize);
  42. //出参,查询到的日志条数
  43. IntByReference relogNum = new IntByReference(1);
  44. boolean bSet=LoginModule.netsdk.CLIENT_QueryDeviceLog(LoginModule.m_hLoginHandle,queryParam,pointer,totalSize,relogNum,3000);
  45. System.out.println("get system log is:"+bSet);
  46. if(bSet){
  47. System.out.println("返回的log 条数:"+relogNum.getValue());
  48. if(relogNum.getValue()>0){
  49. DH_DEVICE_LOG_ITEM_EX[] arrays=(DH_DEVICE_LOG_ITEM_EX[])new DH_DEVICE_LOG_ITEM_EX().toArray(relogNum.getValue());
  50. ToolKits.GetPointerDataToStructArr(pointer,arrays);
  51. for(DH_DEVICE_LOG_ITEM_EX item:arrays){
  52. String time=item.getDate();
  53. String operator=item.getOperator(Charset.forName("GBK")).trim();
  54. String operation=item.getOperation(Charset.forName("GBK")).trim();
  55. String log=item.getLog(Charset.forName("GBK")).trim();
  56. String detailLog=item.getDetailLog(Charset.forName("GBK")).trim();
  57. System.out.println(time+","+operator+","+operation+","+log+","+detailLog+",日志类型:"+item.nLogType);
  58. }
  59. return arrays;
  60. }
  61. }else{
  62. System.out.println("get log error: the error code is "+ToolKits.getErrorCodePrint());
  63. }
  64. return null;
  65. }
  66. public static DH_DEVICE_LOG_ITEM_EX[] getSystemLogV2(NetSDKLib.LLong m_hLoginHandle, NET_TIME startTime, NET_TIME endTime){
  67. //查询条件,作为入参
  68. QUERY_DEVICE_LOG_PARAM param=new QUERY_DEVICE_LOG_PARAM();
  69. //要查询的日志类型
  70. param.emLogType= DH_LOG_QUERY_TYPE.DHLOG_ALL.ordinal();
  71. //通道号
  72. param.nChannelID=0;
  73. //开始查询的条数
  74. param.nStartNum=0;
  75. //结束查询的条数,30-1+1=30,查询的条数是30条
  76. param.nEndNum=1024;
  77. int logNum=param.nEndNum-param.nStartNum+1;
  78. //日志数据结构体类型,写0 c层可能校验不通过,建议写1,使用DH_DEVICE_LOG_ITEM_EX作为日志数据的结构体,
  79. // 因为c层对出参buffer长度的校验是以DH_DEVICE_LOG_ITEM_EX结构体长度来校验的
  80. // 而DH_DEVICE_LOG_ITEM_EX结构体的长度比DH_DEVICE_LOG_ITEM结构体要长得多
  81. param.nLogStuType=1;
  82. //要查询的起始时间段
  83. param.stuStartTime= startTime;
  84. //要查询的结束时间段
  85. param.stuEndTime= endTime;
  86. //入参
  87. Pointer queryParam=new Memory(param.size());
  88. ToolKits.SetStructDataToPointer(param,queryParam,0);
  89. //日志数据结构体
  90. DH_DEVICE_LOG_ITEM_EX logBuffer=new DH_DEVICE_LOG_ITEM_EX();
  91. int totalSize = logBuffer.size() * logNum;
  92. //出参,分配内存
  93. Pointer pointer=new Memory(totalSize);
  94. pointer.clear(totalSize);
  95. //出参,查询到的日志条数
  96. IntByReference relogNum = new IntByReference(1);
  97. boolean bSet=LoginModule.netsdk.CLIENT_QueryDeviceLog(m_hLoginHandle,queryParam,pointer,totalSize,relogNum,3000);
  98. System.out.println("get system log is:"+bSet);
  99. if(bSet){
  100. System.out.println("返回的log 条数:"+relogNum.getValue());
  101. if(relogNum.getValue()>0){
  102. DH_DEVICE_LOG_ITEM_EX[] arrays=(DH_DEVICE_LOG_ITEM_EX[])new DH_DEVICE_LOG_ITEM_EX().toArray(relogNum.getValue());
  103. ToolKits.GetPointerDataToStructArr(pointer,arrays);
  104. for(DH_DEVICE_LOG_ITEM_EX item:arrays){
  105. String time=item.getDate();
  106. String operator=item.getOperator(Charset.forName("GBK")).trim();
  107. String operation=item.getOperation(Charset.forName("GBK")).trim();
  108. String log=item.getLog(Charset.forName("GBK")).trim();
  109. String detailLog=item.getDetailLog(Charset.forName("GBK")).trim();
  110. System.out.println(time+","+operator+","+operation+","+log+","+detailLog+",日志类型:"+item.nLogType);
  111. }
  112. return arrays;
  113. }
  114. }else{
  115. System.out.println("get log error: the error code is "+ToolKits.getErrorCodePrint());
  116. }
  117. return null;
  118. }
  119. }