Пример #1
0
        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();
            }
        }
Пример #2
0
        /// <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);
        }