You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

104 lines
3.9 KiB

  1. package com.netsdk.demo.frame.vto;
  2. import com.sun.jna.NativeLong;
  3. import com.sun.jna.Pointer;
  4. import com.netsdk.common.Res;
  5. import com.netsdk.lib.NetSDKLib;
  6. import com.netsdk.lib.ToolKits;
  7. import javax.swing.*;
  8. import javax.swing.table.DefaultTableModel;
  9. /**
  10. * @author 47081
  11. * @version 1.0
  12. * @description vto监听事件的回调函数, 建议写成单例模式
  13. * @date 2020/8/15
  14. */
  15. public class VTOMessageCallBack implements NetSDKLib.fMessCallBack {
  16. private static VTOMessageCallBack INSTANCE;
  17. private JTable table;
  18. private CollectionFingerPrint print;
  19. private VTOMessageCallBack(JTable table) {
  20. this.table = table;
  21. }
  22. public static VTOMessageCallBack getINSTANCE(JTable table, CollectionFingerPrint print) {
  23. if (INSTANCE == null) {
  24. INSTANCE = new VTOMessageCallBack(table);
  25. }
  26. if (table != null) {
  27. INSTANCE.table = table;
  28. }
  29. if (print != null) {
  30. INSTANCE.print = print;
  31. }
  32. return INSTANCE;
  33. }
  34. @Override
  35. public boolean invoke(int lCommand, NetSDKLib.LLong lLoginID, Pointer pStuEvent, int dwBufLen, String strDeviceIP, NativeLong nDevicePort, Pointer dwUser) {
  36. //门禁事件
  37. if (lCommand == NetSDKLib.NET_ALARM_ACCESS_CTL_EVENT) {
  38. NetSDKLib.ALARM_ACCESS_CTL_EVENT_INFO info = new NetSDKLib.ALARM_ACCESS_CTL_EVENT_INFO();
  39. ToolKits.GetPointerDataToStruct(pStuEvent, 0, info);
  40. //更新列表
  41. if (table != null) {
  42. DefaultTableModel model = (DefaultTableModel) table.getModel();
  43. model.addRow(new Object[]{new String(info.szUserID).trim(), new String(info.szCardNo).trim(), info.stuTime.toStringTime(), openDoorMethod(info.emOpenMethod), info.bStatus == 1 ? Res.string().getSucceed() : Res.string().getFailed()});
  44. }
  45. }
  46. //信息事件
  47. if (lCommand == NetSDKLib.NET_ALARM_FINGER_PRINT) {
  48. if (print != null) {
  49. if (lLoginID.longValue() == print.getLoginHandler()) {
  50. NetSDKLib.ALARM_CAPTURE_FINGER_PRINT_INFO info = new NetSDKLib.ALARM_CAPTURE_FINGER_PRINT_INFO();
  51. ToolKits.GetPointerDataToStruct(pStuEvent, 0, info);
  52. print.setCollectionResult(info.bCollectResult == 1);
  53. if (info.bCollectResult == 1) {
  54. print.setPackageLen(info.nPacketLen * info.nPacketNum);
  55. int length = info.nPacketLen * info.nPacketNum;
  56. byte[] data = new byte[length];
  57. info.szFingerPrintInfo.read(0, data, 0, length);
  58. print.setPackageData(data);
  59. //显示结果
  60. print.setLabelResult(data);
  61. }
  62. print.stopListen();
  63. }
  64. }
  65. }
  66. return true;
  67. }
  68. /**
  69. * 开门方式
  70. *
  71. * @param emOpenMethod
  72. * @return
  73. */
  74. private String openDoorMethod(int emOpenMethod) {
  75. String method;
  76. switch (emOpenMethod) {
  77. case NetSDKLib.NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_CARD:
  78. method = Res.string().getCard();
  79. break;
  80. case NetSDKLib.NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_FACE_RECOGNITION:
  81. method = Res.string().getFaceRecognition();
  82. break;
  83. case NetSDKLib.NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT:
  84. method = Res.string().getFingerPrint();
  85. break;
  86. case NetSDKLib.NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_REMOTE:
  87. method = Res.string().getRemoteOpenDoor();
  88. break;
  89. default:
  90. method = Res.string().getUnKnow();
  91. break;
  92. }
  93. return method;
  94. }
  95. }