public void Init() { if (_Inited) { return; //已经初始化的,返回 } _Inited = true; _Devices.Clear(); foreach (ParkInfo park in ParkBuffer.Current.Parks) { if (park.IsRootPark && park.HostWorkstation == WorkStationInfo.CurrentStation.StationID) { List <EntranceInfo> entrances = park.GetEntrances(true); foreach (EntranceInfo entrance in entrances) { foreach (VideoSourceInfo video in entrance.VideoSources) { if (video.VideoSourceType == (int)VideoServerType.DaHua) { CarPlateDevice device = new CarPlateDevice() { IP = video.MediaSource, VideoID = video.Channel, EntranceID = video.EntranceID, EntranceName = entrance.EntranceName, VideoSource = video }; _Devices.Add(device); } } } ShowItemsOnGrid(_Devices); } } //初始化SDK if (initialized == false) { //这里不直接使用DHClient初始化,是因为DHClient的disConnect和onlineMsg只支持一个事件回调, //所以这里使用管理器的事件处理,在管理器中使用DHClient初始化 DaHuaSDKManager.GetInstance().DisConnectEventHandle -= disConnect; DaHuaSDKManager.GetInstance().DisConnectEventHandle += disConnect; DaHuaSDKManager.GetInstance().OnlineMsgEventHandle -= onlineMsg; DaHuaSDKManager.GetInstance().OnlineMsgEventHandle += onlineMsg; DaHuaSDKManager.GetInstance().InitSDK(); initialized = true; } if (_ConnectThread == null) { _ConnectThread = new Thread(ConnectAllDevices); _ConnectThread.IsBackground = true; _ConnectThread.Start(); } }
/// <summary> /// 开始智能交通设备实时上传--回调 /// </summary> /// <param name="lAnalyzerHandle"></param> /// <param name="dwAlarmType"></param> /// <param name="pAlarmInfo"></param> /// <param name="pBuffer"></param> /// <param name="dwBufSize"></param> /// <param name="dwUser"></param> /// <param name="nSequence"></param> /// <param name="reserved"></param> /// <returns></returns> private int AnalyzerDataCallBackEvent(Int32 lAnalyzerHandle, UInt32 dwAlarmType, IntPtr pAlarmInfo, IntPtr pBuffer, UInt32 dwBufSize, UInt32 dwUser, Int32 nSequence, IntPtr reserved) { if (dwBufSize == 0) { return(1); } try { CarPlateDevice device = _Devices.SingleOrDefault(d => d.m_nRealLoadPic == lAnalyzerHandle); if (device != null) { // 记录文件 byte[] buf = new byte[dwBufSize]; Marshal.Copy(pBuffer, buf, 0, (int)dwBufSize); DH_MSG_OBJECT plateObj = new DH_MSG_OBJECT(); DH_MSG_OBJECT VehicleObj = new DH_MSG_OBJECT(); NET_TIME_EX utc = new NET_TIME_EX(); int lane = 0; string strMsg; bool bret = DaHuaSDKManager.GetInstance().GetStuObject(dwAlarmType, pAlarmInfo, out plateObj, out VehicleObj, out utc, out lane, out strMsg); device.ResetResult(); if (plateObj.szText != null) { device.CarPlate = Encoding.GetEncoding("gb2312").GetString(plateObj.szText); } if (!string.IsNullOrEmpty(device.CarPlate)) { device.CarPlate = device.CarPlate.TrimEnd('\0'); //去除结束符\0 } device.EventDateTime = DateTime.Now; if (plateObj.bColor == 1) { device.PlateColor = DaHuaSDKManager.GetInstance().GetColorString(plateObj.rgbaMainColor); } if (VehicleObj.bColor == 1) { device.CarColor = DaHuaSDKManager.GetInstance().GetColorString(VehicleObj.rgbaMainColor); } device.Lane = lane; try { device.DeviceSnapTime = new DateTime((int)utc.dwYear, (int)utc.dwMonth, (int)utc.dwDay, (int)utc.dwHour, (int)utc.dwMinute, (int)utc.dwSecond, (int)utc.dwMillisecond); } catch { } device.SnapPath = DaHuaSDKManager.GetInstance().SaveSnapImage(buf); device.PlatePath = DaHuaSDKManager.GetInstance().SavePlateJpg(plateObj, pBuffer, buf); foreach (DataGridViewRow row in dataGridView1.Rows) { CarPlateDevice d = row.Tag as CarPlateDevice; if (d != null) { if (d.m_nRealLoadPic == device.m_nRealLoadPic) { ShowItemOnRow(device, row); } } } if (_ActiveDevice != null && _ActiveDevice.m_nRealLoadPic == device.m_nRealLoadPic) { ShowCarPlateInfo(device); } } } catch (Exception ex) { Ralid.GeneralLibrary.ExceptionHandling.ExceptionPolicy.HandleException(ex); } return(1); }