/// <summary> /// 报警回调函数,接收设备报警消息等。 /// </summary> /// <param name="lCommand"></param> /// <param name="pAlarmer"></param> /// <param name="pAlarmInfo"></param> /// <param name="dwBufLen"></param> /// <param name="pUser"></param> /// <returns></returns> private static bool MSesGCallback(int lCommand, ref CHCNetSDK.NET_DVR_ALARMER pAlarmer, IntPtr pAlarmInfo, uint dwBufLen, IntPtr pUser) { //回调函数中不可有耗时较长的操作,不能调用该 SDK(HCNetSDK.dll)本身的接口。 //以下代码仅供参考,实际应用中不建议在回调函数中直接处理数据保存文件, //例如可以使用消息的方式(PostMessage)在消息响应函数里进行处理。 switch (lCommand) { case CHCNetSDK.COMM_ALARM_ACS: //门禁主机报警信息 { CHCNetSDK.NET_DVR_ACS_ALARM_INFO struAcsAlarmInfo = new CHCNetSDK.NET_DVR_ACS_ALARM_INFO(); //Marshal.PtrToStructure(pAlarmInfo, struAcsAlarmInfo); var result = Marshal.PtrToStructure(pAlarmInfo, typeof(CHCNetSDK.NET_DVR_ACS_ALARM_INFO)); struAcsAlarmInfo = (CHCNetSDK.NET_DVR_ACS_ALARM_INFO)result; Console.WriteLine(StrAlarmInfo(struAcsAlarmInfo)); //switch (struAcsAlarmInfo.dwMajor) //{ // case CHCNetSDK.MAJOR_ALARM: // Console.WriteLine(StrAlarmInfo(struAcsAlarmInfo)); // break; // case CHCNetSDK.MAJOR_EXCEPTION: // Console.WriteLine("异常"); // break; // case CHCNetSDK.MAJOR_OPERATION: // Console.WriteLine("操作"); // break; // case CHCNetSDK.MAJOR_EVENT: // Console.WriteLine("事件"); // break; // default: // break; //} //按需处理报警信息结构体中的信息...... break; } case CHCNetSDK.COMM_ID_INFO_ALARM: //门禁身份证刷卡信息 { CHCNetSDK.NET_DVR_ID_CARD_INFO_ALARM struID_CardInfo = new CHCNetSDK.NET_DVR_ID_CARD_INFO_ALARM(); Marshal.PtrToStructure(pAlarmInfo, struID_CardInfo); //按需处理报警信息结构体中的信息...... break; } case CHCNetSDK.COMM_PASSNUM_INFO_ALARM: //门禁通行人数信息 { CHCNetSDK.NET_DVR_PASSNUM_INFO_ALARM struPassnumInfo = new CHCNetSDK.NET_DVR_PASSNUM_INFO_ALARM(); Marshal.PtrToStructure(pAlarmInfo, struPassnumInfo); //按需处理报警信息结构体中的信息...... break; } default: break; } return(true); }
/// <summary> /// 门禁主机报警信息 /// </summary> /// <param name="sAlarm"></param> /// <returns></returns> public static string StrAlarmInfo(CHCNetSDK.NET_DVR_ACS_ALARM_INFO sAlarm) { DateTime dtime = new DateTime((int)sAlarm.struTime.dwYear, (int)sAlarm.struTime.dwMonth, (int)sAlarm.struTime.dwDay, (int)sAlarm.struTime.dwHour, (int)sAlarm.struTime.dwMinute, (int)sAlarm.struTime.dwSecond); string time = dtime.ToString("yyyy-MM-dd HH:mm:ss"); string netUser = Encoding.UTF8.GetString(sAlarm.sNetUser); string details = Encoding.UTF8.GetString(StructToBytes(sAlarm.struAcsEventInfo)); string result = (GetMajorType(sAlarm.dwMajor, sAlarm.dwMinor) + ",报警时间:" + time + ",网络操作的用户名:" + netUser + ",远程主机地址" + sAlarm.struRemoteHostAddr.sIpV4 + "\r\n" + ",报警信息详细参数:" + details + ","); return(result); }
/// <summary> /// 门禁主机报警信息 /// </summary> /// <param name="sAlarm"></param> /// <returns></returns> public static string StrAlarmInfo(CHCNetSDK.NET_DVR_ACS_ALARM_INFO sAlarm) { DateTime dtime = new DateTime((int)sAlarm.struTime.dwYear, (int)sAlarm.struTime.dwMonth, (int)sAlarm.struTime.dwDay, (int)sAlarm.struTime.dwHour, (int)sAlarm.struTime.dwMinute, (int)sAlarm.struTime.dwSecond); string time = dtime.ToString("yyyy-MM-dd HH:mm:ss"); string netUser = Encoding.UTF8.GetString(sAlarm.sNetUser).TrimEnd('\0'); byte[] ipv6 = sAlarm.struRemoteHostAddr.sIpV6; string ipAddress = "ipV4=" + sAlarm.struRemoteHostAddr.sIpV4.TrimEnd('\0') + ",ipV6=" + Encoding.UTF8.GetString(ipv6).TrimEnd('\0'); //string details = Encoding.UTF8.GetString(StructToBytes(sAlarm.struAcsEventInfo)); string details = sAlarm.struAcsEventInfo.ToString(); string result = (GetMajorType(sAlarm.dwMajor, sAlarm.dwMinor) + ",报警时间=" + time + ",网络操作的用户名=" + netUser + ",远程主机地址," + ipAddress + ",报警信息详细参数," + details); return(result); }
private void ProcessCommAlarmACS(ref CHCNetSDK.NET_DVR_ALARMER pAlarmer, IntPtr pAlarmInfo, uint dwBufLen, IntPtr pUser) { CHCNetSDK.NET_DVR_ACS_ALARM_INFO struAcsAlarmInfo = new CHCNetSDK.NET_DVR_ACS_ALARM_INFO(); struAcsAlarmInfo = (CHCNetSDK.NET_DVR_ACS_ALARM_INFO)Marshal.PtrToStructure(pAlarmInfo, typeof(CHCNetSDK.NET_DVR_ACS_ALARM_INFO)); CHCNetSDK.NET_DVR_LOG_V30 struFileInfo = new CHCNetSDK.NET_DVR_LOG_V30(); struFileInfo.dwMajorType = struAcsAlarmInfo.dwMajor; struFileInfo.dwMinorType = struAcsAlarmInfo.dwMinor; char[] csTmp = new char[256]; if (CHCNetSDK.MAJOR_ALARM == struFileInfo.dwMajorType) { TypeMap.AlarmMinorTypeMap(struFileInfo, csTmp); } else if (CHCNetSDK.MAJOR_OPERATION == struFileInfo.dwMajorType) { TypeMap.OperationMinorTypeMap(struFileInfo, csTmp); } else if (CHCNetSDK.MAJOR_EXCEPTION == struFileInfo.dwMajorType) { TypeMap.ExceptionMinorTypeMap(struFileInfo, csTmp); } else if (CHCNetSDK.MAJOR_EVENT == struFileInfo.dwMajorType) { TypeMap.EventMinorTypeMap(struFileInfo, csTmp); } String szInfo = new String(csTmp).TrimEnd('\0'); String szInfoBuf = null; szInfoBuf = szInfo; /**************************************************/ String name = System.Text.Encoding.UTF8.GetString(struAcsAlarmInfo.sNetUser).TrimEnd('\0'); for (int i = 0; i < struAcsAlarmInfo.sNetUser.Length; i++) { if (struAcsAlarmInfo.sNetUser[i] == 0) { name = name.Substring(0, i); break; } } /**************************************************/ szInfoBuf = string.Format("{0} time:{1,4}-{2:D2}-{3} {4:D2}:{5:D2}:{6:D2}, [{7}]({8})", szInfo, struAcsAlarmInfo.struTime.dwYear, struAcsAlarmInfo.struTime.dwMonth, struAcsAlarmInfo.struTime.dwDay, struAcsAlarmInfo.struTime.dwHour, struAcsAlarmInfo.struTime.dwMinute, struAcsAlarmInfo.struTime.dwSecond, struAcsAlarmInfo.struRemoteHostAddr.sIpV4, name); if (struAcsAlarmInfo.struAcsEventInfo.byCardNo[0] != 0) { szInfoBuf = szInfoBuf + "+Card Number:" + System.Text.Encoding.UTF8.GetString(struAcsAlarmInfo.struAcsEventInfo.byCardNo).TrimEnd('\0'); } String[] szCardType = { "normal card", "disabled card", "blacklist card", "night watch card", "stress card", "super card", "guest card" }; byte byCardType = struAcsAlarmInfo.struAcsEventInfo.byCardType; if (byCardType != 0 && byCardType <= szCardType.Length) { szInfoBuf = szInfoBuf + "+Card Type:" + szCardType[byCardType - 1]; } if (struAcsAlarmInfo.struAcsEventInfo.dwCardReaderNo != 0) { szInfoBuf = szInfoBuf + "+Card Reader Number:" + struAcsAlarmInfo.struAcsEventInfo.dwCardReaderNo; } if (struAcsAlarmInfo.struAcsEventInfo.dwDoorNo != 0) { szInfoBuf = szInfoBuf + "+Door Number:" + struAcsAlarmInfo.struAcsEventInfo.dwDoorNo; } if (struAcsAlarmInfo.struAcsEventInfo.dwVerifyNo != 0) { szInfoBuf = szInfoBuf + "+Multiple Card Authentication Serial Number:" + struAcsAlarmInfo.struAcsEventInfo.dwVerifyNo; } if (struAcsAlarmInfo.struAcsEventInfo.dwAlarmInNo != 0) { szInfoBuf = szInfoBuf + "+Alarm Input Number:" + struAcsAlarmInfo.struAcsEventInfo.dwAlarmInNo; } if (struAcsAlarmInfo.struAcsEventInfo.dwAlarmOutNo != 0) { szInfoBuf = szInfoBuf + "+Alarm Output Number:" + struAcsAlarmInfo.struAcsEventInfo.dwAlarmOutNo; } if (struAcsAlarmInfo.struAcsEventInfo.dwCaseSensorNo != 0) { szInfoBuf = szInfoBuf + "+Event Trigger Number:" + struAcsAlarmInfo.struAcsEventInfo.dwCaseSensorNo; } if (struAcsAlarmInfo.struAcsEventInfo.dwRs485No != 0) { szInfoBuf = szInfoBuf + "+RS485 Channel Number:" + struAcsAlarmInfo.struAcsEventInfo.dwRs485No; } if (struAcsAlarmInfo.struAcsEventInfo.dwMultiCardGroupNo != 0) { szInfoBuf = szInfoBuf + "+Multi Recombinant Authentication ID:" + struAcsAlarmInfo.struAcsEventInfo.dwMultiCardGroupNo; } if (struAcsAlarmInfo.struAcsEventInfo.byCardReaderKind != 0) { szInfoBuf = szInfoBuf + "+CardReaderKind:" + struAcsAlarmInfo.struAcsEventInfo.byCardReaderKind.ToString(); } if (struAcsAlarmInfo.struAcsEventInfo.wAccessChannel >= 0) { szInfoBuf = szInfoBuf + "+wAccessChannel:" + struAcsAlarmInfo.struAcsEventInfo.wAccessChannel; } if (struAcsAlarmInfo.struAcsEventInfo.dwEmployeeNo != 0) { szInfoBuf = szInfoBuf + "+EmployeeNo:" + struAcsAlarmInfo.struAcsEventInfo.dwEmployeeNo; } if (struAcsAlarmInfo.struAcsEventInfo.byDeviceNo != 0) { szInfoBuf = szInfoBuf + "+byDeviceNo:" + struAcsAlarmInfo.struAcsEventInfo.byDeviceNo.ToString(); } if (struAcsAlarmInfo.struAcsEventInfo.wLocalControllerID >= 0) { szInfoBuf = szInfoBuf + "+wLocalControllerID:" + struAcsAlarmInfo.struAcsEventInfo.wLocalControllerID; } if (struAcsAlarmInfo.struAcsEventInfo.byInternetAccess >= 0) { szInfoBuf = szInfoBuf + "+byInternetAccess:" + struAcsAlarmInfo.struAcsEventInfo.byInternetAccess.ToString(); } if (struAcsAlarmInfo.struAcsEventInfo.byType >= 0) { szInfoBuf = szInfoBuf + "+byType:" + struAcsAlarmInfo.struAcsEventInfo.byType.ToString(); } if (struAcsAlarmInfo.struAcsEventInfo.bySwipeCardType != 0) { szInfoBuf = szInfoBuf + "+bySwipeCardType:" + struAcsAlarmInfo.struAcsEventInfo.bySwipeCardType.ToString(); } //其它消息先不罗列了...... if (struAcsAlarmInfo.dwPicDataLen > 0) { path = null; Random rand = new Random(unchecked ((int)DateTime.Now.Ticks)); path = string.Format(@"C:/Picture/ACS_LocalTime{0}_{1}.bmp", szInfo, rand.Next()); using (FileStream fs = new FileStream(path, FileMode.Create)) { int iLen = (int)struAcsAlarmInfo.dwPicDataLen; byte[] by = new byte[iLen]; Marshal.Copy(struAcsAlarmInfo.pPicData, by, 0, iLen); fs.Write(by, 0, iLen); fs.Close(); } szInfoBuf = szInfoBuf + "SavePath:" + path; } this.listViewAlarmInfo.BeginInvoke(new Action(() => { ListViewItem Item = new ListViewItem(); Item.Text = (++m_lLogNum).ToString(); Item.SubItems.Add(DateTime.Now.ToString()); Item.SubItems.Add(szInfoBuf); this.listViewAlarmInfo.Items.Add(Item); })); }