xiongzhu 5 yıl önce
ebeveyn
işleme
bdbdfbe95b
2 değiştirilmiş dosya ile 127 ekleme ve 1 silme
  1. 22 1
      libs/HCNetSDK.cs
  2. 105 0
      views/MainWindow.xaml.cs

+ 22 - 1
libs/HCNetSDK.cs

@@ -114,6 +114,11 @@ namespace DeviceCenter
 
         public const int COMM_ALARM_ACS = 0x5002; //access card alarm
 
+        public const int NET_SDK_GET_NEXT_STATUS_SUCCESS = 1000;
+        public const int NET_SDK_GET_NEXT_STATUS_NEED_WAIT = 1001;
+        public const int NET_SDK_GET_NEXT_STATUS_FINISH = 1002;
+        public const int NET_SDK_GET_NEXT_STATUS_FAILED = 1003;
+
         /* Alarm */
         // Main Type
         public const int MAJOR_ALARM = 0x1;
@@ -3200,6 +3205,14 @@ namespace DeviceCenter
             public byte byTimeType;
             [MarshalAs(UnmanagedType.ByValArray, SizeConst = 61)]
             public byte[] byRes;
+
+            public void init()
+            {
+                sNetUser = new byte[CHCNetSDK.MAX_NAMELEN];
+                struRemoteHostAddr.Init();
+                struAcsEventInfo.init();
+                byRes = new byte[61];
+            }
         }
 
         public struct NET_DVR_ACS_EVENT_DETAIL
@@ -3245,6 +3258,14 @@ namespace DeviceCenter
             public byte[] byEmployeeNo;
             [MarshalAs(UnmanagedType.ByValArray, SizeConst = 64)]
             public byte[] byRes;
+            public void init()
+            {
+                byCardNo = new byte[CHCNetSDK.ACS_CARD_NO_LEN];
+                byMACAddr = new byte[CHCNetSDK.MACADDR_LEN];
+                byRe2 = new byte[2];
+                byEmployeeNo = new byte[CHCNetSDK.NET_SDK_EMPLOYEE_NO_LEN];
+                byRes = new byte[64];
+            }
         }
 
         #region video call struct
@@ -3417,7 +3438,7 @@ namespace DeviceCenter
          * [in] dwOutBuffSize- the receive data buffer size, unit:byte
          */
         [DllImportAttribute(@"HCNetSDK.dll")]
-        public static extern int NET_DVR_GetNextRemoteConfig(int lHandle, IntPtr lpOutBuff, uint dwOutBuffSize);
+        public static extern int NET_DVR_GetNextRemoteConfig(int lHandle, ref CHCNetSDK.NET_DVR_ACS_EVENT_CFG lpOutBuff, int dwOutBuffSize);
 
         /* Batch for device configuration information (with sending data)
          * [in] lUserID - NET_DVR_Login_V40 return value

+ 105 - 0
views/MainWindow.xaml.cs

@@ -436,5 +436,110 @@ namespace DeviceCenter
             }
 
         }
+
+        private void getEvent(int userId)
+        {
+            CHCNetSDK.NET_DVR_ACS_EVENT_COND struCond = new CHCNetSDK.NET_DVR_ACS_EVENT_COND();
+            struCond.Init();
+            struCond.dwSize = (uint)Marshal.SizeOf(struCond);
+
+            struCond.dwMajor = CHCNetSDK.MAJOR_EVENT;
+
+            struCond.dwMinor = CHCNetSDK.MINOR_FACE_VERIFY_PASS;
+
+            DateTime date = DateTime.Now.AddDays(-1);
+            struCond.struStartTime.dwYear = date.Year;
+            struCond.struStartTime.dwMonth = date.Month;
+            struCond.struStartTime.dwDay = date.Day;
+            struCond.struStartTime.dwHour = 0;
+            struCond.struStartTime.dwMinute = 0;
+            struCond.struStartTime.dwSecond = 0;
+
+            struCond.struEndTime.dwYear = date.Year;
+            struCond.struEndTime.dwMonth = date.Month;
+            struCond.struEndTime.dwDay = date.Day;
+            struCond.struEndTime.dwHour = 23;
+            struCond.struEndTime.dwMinute = 59;
+            struCond.struEndTime.dwSecond = 59;
+
+            struCond.byPicEnable = 0;
+            struCond.szMonitorID = "";
+            struCond.wInductiveEventType = 65535;
+
+            //if (!StrToByteArray(ref struCond.byCardNo, textBoxCardNo.Text))
+            //{
+            //    return;
+            //}
+
+            //if (!StrToByteArray(ref struCond.byName, textBoxName.Text))
+            //{
+            //    return;
+            //}
+            //struCond.dwBeginSerialNo = 0;
+            //struCond.dwEndSerialNo = 0;
+
+            uint dwSize = struCond.dwSize;
+            IntPtr ptrCond = Marshal.AllocHGlobal((int)dwSize);
+            Marshal.StructureToPtr(struCond, ptrCond, false);
+            int m_lGetAcsEventHandle = CHCNetSDK.NET_DVR_StartRemoteConfig(userId, CHCNetSDK.NET_DVR_GET_ACS_EVENT, ptrCond, (int)dwSize, null, IntPtr.Zero);
+            if (-1 == m_lGetAcsEventHandle)
+            {
+                Marshal.FreeHGlobal(ptrCond);
+                log.Error($"NET_DVR_StartRemoteConfig FAIL, ERROR CODE {CHCNetSDK.NET_DVR_GetLastError()}");
+                return;
+            }
+
+            Thread m_pDisplayListThread = new Thread(() =>
+            {
+                ProcessEvent(m_lGetAcsEventHandle);
+            });
+            m_pDisplayListThread.Start();
+            Marshal.FreeHGlobal(ptrCond);
+        }
+
+        public void ProcessEvent(int m_lGetAcsEventHandle)
+        {
+            int dwStatus = 0;
+            Boolean Flag = true;
+            CHCNetSDK.NET_DVR_ACS_EVENT_CFG struCFG = new CHCNetSDK.NET_DVR_ACS_EVENT_CFG();
+            struCFG.dwSize = (uint)Marshal.SizeOf(struCFG);
+            int dwOutBuffSize = (int)struCFG.dwSize;
+            struCFG.init();
+            while (Flag)
+            {
+                dwStatus = CHCNetSDK.NET_DVR_GetNextRemoteConfig(m_lGetAcsEventHandle, ref struCFG, dwOutBuffSize);
+                switch (dwStatus)
+                {
+                    case CHCNetSDK.NET_SDK_GET_NEXT_STATUS_SUCCESS://成功读取到数据,处理完本次数据后需调用next
+                        ProcessAcsEvent(ref struCFG, ref Flag);
+                        break;
+                    case CHCNetSDK.NET_SDK_GET_NEXT_STATUS_NEED_WAIT:
+                        Thread.Sleep(200);
+                        break;
+                    case CHCNetSDK.NET_SDK_GET_NEXT_STATUS_FAILED:
+                        CHCNetSDK.NET_DVR_StopRemoteConfig(m_lGetAcsEventHandle);
+                        log.Error($"NET_SDK_GET_NEXT_STATUS_FAILED {CHCNetSDK.NET_DVR_GetLastError()}");
+                        Flag = false;
+                        break;
+                    case CHCNetSDK.NET_SDK_GET_NEXT_STATUS_FINISH:
+                        CHCNetSDK.NET_DVR_StopRemoteConfig(m_lGetAcsEventHandle);
+                        Flag = false;
+                        break;
+                    default:
+                        log.Info($"NET_SDK_GET_NEXT_STATUS_UNKOWN {CHCNetSDK.NET_DVR_GetLastError()}");
+                        Flag = false;
+                        CHCNetSDK.NET_DVR_StopRemoteConfig(m_lGetAcsEventHandle);
+                        break;
+                }
+            }
+        }
+
+        private void ProcessAcsEvent(ref CHCNetSDK.NET_DVR_ACS_EVENT_CFG struCFG, ref bool flag)
+        {
+            int employNo = (int)struCFG.struAcsEventInfo.dwEmployeeNo;
+            string cardNo = Encoding.UTF8.GetString(struCFG.struAcsEventInfo.byCardNo).TrimEnd('\0');
+            string time = $"{struCFG.struTime.dwYear:D4}-{struCFG.struTime.dwMonth:D2}-{struCFG.struTime.dwDay:D4} {struCFG.struTime.dwHour:D2}:{struCFG.struTime.dwMinute:D2}:{struCFG.struTime.dwSecond:D2}";
+            log.Info($"receive acs event employNo:{employNo} cardNo:{cardNo} time:{time}");
+        }
     }
 }