Newer
Older
IRIS_REFACTOR / irisRefactor / ProMemory.cs
using fingerPrint;
using irisDataBase;
using irisDataBase.Service;
using irisDataBase.Service.mysqlImpl;
using IrisDoor;
using irisHelper;
using irisIoControll;
using irisIoControll.Service;
using irisMemory;
using irisRefactor.fingerThread;
using irisRefactor.FrmService;
using irisRefactor.IrisCamera;
using irisRefactor.IrisScoket;
using irisRefactor.IrisThread;
using MvCamCtrl.NET;
using System;
using System.Data;
using System.IO;
using System.Net;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading;
using System.Windows.Forms;
using System.Xml.Linq;

namespace irisRefactor
{
    public class ProMemory
    {
        public static String formType;
        public static ProConfig proConfig;
        public static AppConfig appConfig;
        public static IrisConfig irisConfig;
        public static IdentifyConfig identifyConfig;
        public static IoControllService IoControllService = (IoControllService)IrisIoControllObject.getEntity();
        public static IrisDataService irisDataService = (IrisDataService)IrisDataBaseObject.getEntity("IrisDataService");
        public static FingerDataService fingerDataService = (FingerDataService)IrisDataBaseObject.getEntity("FingerDataService");
        public static IrisPersonViewService irisPersonViewService = (IrisPersonViewService)IrisDataBaseObject.getEntity("IrisPersonView");
        public static IrisRecordsService irisRecordsService = (IrisRecordsService)IrisDataBaseObject.getEntity("IrisRecords");
        public static IrisSynchDataService irisSynchDataService=(IrisSynchDataService)IrisDataBaseObject.getEntity("IrisSynchData");
        public static IrisPermisionService irisPermisionService = (IrisPermisionService)IrisDataBaseObject.getEntity("IrisPermision");
        public static IrisDeviceService irisDeviceService = (IrisDeviceService)IrisDataBaseObject.getEntity("IrisDevice");

        public static bool goingToCloseForm = false; /*是否正在关闭程序标志*/
        public static bool m_bGrabbing = false; /*是否正在拍摄标志*/
        //public static int Tag_SleepTimer = 0;
        //public static int Tag_IdentifyTimer = 0;

        public static bool isSyning = false;
        public static bool jobRuning = false;

        public static bool isWait = false;//是否待机
        public static bool findingEyes = false;//开始找眼标记

        public static string hostIp = "";

        public static MyCamera.cbOutputdelegate ImageCallback;
        public static MyCamera.cbExceptiondelegate CallBackFunc;
        public static MyCamera.MV_CC_DEVICE_INFO_LIST m_pDeviceList; /*采集图像*/
        public static System.Windows.Forms.Timer timerCamera;
        // public static System.Threading.Timer timer1;
        // public static System.Threading.Timer timer2;
        public static CameraController cameraController;

        public static FingerPrintModule fingerPrintModule;

        /// <summary>
        /// //////
        /// </summary>
        public static int tempRegion; //温度区间1-温度过低,2-体温正常,3-体温异常,4-温度过高
        //public static String tempString;
        public static bool isSleeping = false;

        [DllImport("User32.dll")]
        static extern int SendMessage(IntPtr hWnd, int msg, int wParam, int Iparam);
        const int WM_CLOSE = 0X0010;
        [DllImport("CaptureEye_Rec.dll", EntryPoint = "CaptureEye_Rec")]
        public static extern unsafe int CaptureEye_Rec(IntPtr Data, ref int* pos);
        [DllImport("AssessFocus_RecSY.dll", EntryPoint = "AssessFocus_Rec")]
        public static extern unsafe int AssessFocus_Rec(IntPtr Data, int[] Pos, ref byte* irisImage, ref byte* irisImage2);


        public static StringBuilder stringBuilder = new StringBuilder();
        public static StringBuilder tempString = new StringBuilder();
        /// <summary>
        /// 注意初始不要涉及数据库
        /// </summary>
        public static void InitProMemory()
        {
            try
            {
                formType = ConfigHelper.GetAppConfig("formType");

                proConfig = ProConfig.GetInstance();
                appConfig = AppConfig.GetInstance();
                irisConfig = IrisConfig.GetInstance();
                identifyConfig = IdentifyConfig.GetInstance;

                //GetHostIPv4();
                hostIp = ConfigHelper.GetAppConfig("hostIp");
                
                //嵌入式电脑I/O口初始化
                IoControllService.initIO();

                // 相机控制
                cameraController = CameraController.GetInstance();

                //检测并连接相机
                proConfig.PDeviceList = new MyCamera.MV_CC_DEVICE_INFO_LIST();
                timerCamera = new System.Windows.Forms.Timer();
                timerCamera.Tick += new EventHandler(cameraController.TimerCamera_Tick);
                timerCamera.Interval = 3000; // 延时3000ms执行
                timerCamera.Start();

                //初始化门禁,若有权限链接串口
                DoorSystem doorSystem = new DoorSystem();

                // 初始化指纹识别模块
                if (ConfigHelper.GetAppConfig("fingerEnable") == "true")
                {
                    fingerPrintModule = new FingerPrintModule();
                    int ret = fingerPrintModule.ConnectDeivce();
                    if (ret == 0)
                    {
                        LogHelper.WriteInfoLog(MethodBase.GetCurrentMethod().DeclaringType, "指纹模块连接成功");
                    } 
                    else 
                    {
                        LogHelper.WriteErrorLog(MethodBase.GetCurrentMethod().DeclaringType, "指纹模块连接失败");
                    }
                }

                //数据库链接
                Thread connectServerThread = new Thread(ConnectDatabase);
                connectServerThread.Start();
            }
            catch (Exception ex) {
                LogHelper.WriteErrorLog(MethodBase.GetCurrentMethod().DeclaringType, ex.Message);
            }
        }

        private static void ConnectDatabase()
        {
            if (DatabaseLocal.OpenDB(appConfig.DbLocalConfig) == 0)
            {
                string msg = "本地数据库连接成功";
                LogHelper.WriteInfoLog(MethodBase.GetCurrentMethod().DeclaringType, msg);

                proConfig.CodeListMgr = new IrisCodeListMgr(); //匹配列表初始化
                proConfig.CodeListMgr.CreateList(irisDataService.getAllIrisCodeLocal());//加载匹配列表

                // 指纹数据库在保存在内存中 应用重启后需要重新初始化数据库并添加指纹模板数据
                fingerPrintModule.FingerPrintZkMgr.CreateList(fingerDataService.GetAllFingerTemplateLocal());
                int count = fingerPrintModule.SetFingerTemplate(fingerPrintModule.FingerPrintZkMgr.UserFingerList);
                if (count >= 0)
                {
                    LogHelper.WriteInfoLog(MethodBase.GetCurrentMethod().DeclaringType, "初始化指纹模板数据库成功[" + count + "]");
                    /*
                    byte[] tempData = new byte[1216];
                    int tempLen = 1216;
                    fingerPrintModule.ReadFileData("d:\\template1-1216.ts", ref tempData, ref tempLen);
                    fingerDataService.InsertFingerData(1, 1210930973838151680, tempData, tempLen);

                    byte[] tempData2 = new byte[902];
                    int tempLen2 = 902;
                    fingerPrintModule.ReadFileData("d:\\template2-902.ts", ref tempData2, ref tempLen2);
                    fingerDataService.InsertFingerData(2, 1210933614471286784, tempData2, tempLen2);
                    */
                }
            }
            else
            {
                if (ProMemory.appConfig.Language == 1)
                    MessageBox.Show("本地数据库连接失败,程序即将关闭!", "异常", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                else
                    MessageBox.Show("database connection fialed", "message");
                Application.ExitThread();
                Application.Exit();
            }

            // 开始监听服务端口
            SocketHelper socket = new SocketHelper();
            socket.start();

            // 开始指纹识别线程
            Thread thFingerIdentify = new Thread(FingerIdentifyTh.GetInstance.FingerIdentify)
            {
                Name = "FingerIdentifyThread" + DateTime.Now.ToString("[MMddHHmmss]")
            };
            Thread.Sleep(4000);
            FingerIdentifyTh.GetInstance.CaptureWorking = true;
            thFingerIdentify.Start();
        }

        public static void Close() {
            goingToCloseForm = true;

            irisConfig.IdentifyThreadRun = false;
            irisConfig.AssessThreadRun = false;
            irisConfig.EyeFinderThreadRun = false;
            //cameraController.Grabbing();
            cameraController.CloseCamera();

            IoControllService.YellowOff();
            IoControllService.RedOff();
            IoControllService.GreenOff();

            DatabaseLocal.CloseDB();
        }

        //获取本机IP
        private static void GetHostIPv4()
        {
            IPHostEntry hostEntry = Dns.GetHostEntry(Dns.GetHostName());

            if (hostEntry.AddressList.Length > 0)
            {
                foreach (IPAddress ipAddr in hostEntry.AddressList)
                {
                    if (ipAddr.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
                    {
                        //hostIp = ipAddr.ToString();
                        String ip = ipAddr.ToString();
                        if (ip != null && ip != "")
                            ConfigHelper.UpdateAppConfig("hostIp", ip);
                        break;
                    }
                }
            }
        }

    }
}