Newer
Older
IRIS_REFACTOR / irisRefactor / IrisThread / IdentiyfTh.cs
yanxiaowei on 11 Aug 2020 3 KB first commit
using irisHelper;
using irisRefactor.FrmService;
using irisRefactor.IrisCamera;
using irisRefactor.IrisScoket;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading;

namespace irisRefactor.IrisThread
{
    public class IdentiyfTh
    {
        private static IdentiyfTh _identiyfTh = null;
        private IdentiyfTh() {
        }
        public static IdentiyfTh GetInstance()
        {
            if (_identiyfTh == null)
                _identiyfTh = new IdentiyfTh();

            return _identiyfTh;

        }

        public void Identify()
        {
            LogHelper.WriteLog(MethodBase.GetCurrentMethod().DeclaringType, "Identify");
            ProMemory.irisConfig.IdentifyAccess = true;

            try
            {
                int iMatchNumber = 0;
                float iHammingDistance = 1;
                int iLeftRight = 0;

                while (ProMemory.irisConfig.IdentifyThreadRun == true && iMatchNumber == 0 &&
                    ProMemory.Tag_IdentifyTimer == 0 && !ProMemory.goingToCloseForm&&!ProMemory.isSyning)
                {
                    if (ProMemory.irisConfig.Q4.Count > 0)
                    {
                        lock (ProMemory.irisConfig.Q4)
                        {
                            if (ProMemory.irisConfig.Q4.Count > 0)
                            {
                                ProMemory.irisConfig.QualifiedIrisBuffer = ProMemory.irisConfig.Q4.Pop();
                            }
                        }
                        if (ProMemory.irisConfig.QualifiedIrisBuffer != null)
                        {
                            //加载匹配列表
                            iMatchNumber = ProMemory.proConfig.CodeListMgr.MatchOneEye(ProMemory.irisConfig.QualifiedIrisBuffer, out iHammingDistance, out iLeftRight);
                        }
                    }
                }

                ProMemory.timer2.Dispose();//停止计时器

                //跳出循环,条件是时间到、匹配成功或者正在关闭程序      
                ProMemory.irisConfig.AssessThreadRun = false;
                ProMemory.irisConfig.EyeFinderThreadRun = false;

                if(ProMemory.appConfig.AuthConfig.HasTempDtAuthority)
                    ProMemory.tempRegion = Form1.GetInstance().obtainTemp();

                //匹配成功
                if (iMatchNumber > 0)
                {
                    string personId = ProMemory.proConfig.CodeListMgr.GetUserForIndex(iMatchNumber);//personId                  
                    if (ProMemory.formType == "1")
                        Form1.GetInstance().Success(personId);
                    else if (ProMemory.formType == "2")
                        Form2.GetInstance().Success(personId);
                    //int time = Convert.ToInt32(ConfigHelper.GetAppConfig("showTimeSuccess"));
                    Thread.Sleep(ProMemory.appConfig.ShowTimeSuccess);
                }
                //匹配失败
                else
                {
                    LogHelper.WriteLog(MethodBase.GetCurrentMethod().DeclaringType, "未知人员温度:" + ProMemory.tempString);

                    if (ProMemory.formType == "1")
                        Form1.GetInstance().failure();
                    else if (ProMemory.formType == "2")
                        Form2.GetInstance().failure();
                    //int time2 = Convert.ToInt32(ConfigHelper.GetAppConfig("showTimeFailure"));
                    Thread.Sleep(ProMemory.appConfig.ShowTimeFailure);
                }

                ProMemory.cameraController.ContinuousShot_TriggerOff();

            }
            catch (Exception ex)
            {
                string msg = "虹膜匹配线程CatchError:" + ex;
                LogHelper.WriteLog(MethodBase.GetCurrentMethod().DeclaringType, msg);
            }
        }


    }
}