예제 #1
0
        /// <summary>
        /// 构造 "卡参数配置结构体"(下发卡数据用)
        /// </summary>
        /// <param name="userInfo"></param>
        /// <returns></returns>
        private CHCNetSDK.NET_DVR_CARD_CFG_V50 BuildCardCfgStruct(Core.Domain.EntranceControl.UserInfo userInfo)
        {
            CHCNetSDK.NET_DVR_CARD_CFG_V50 struCardCfg = new CHCNetSDK.NET_DVR_CARD_CFG_V50();
            struCardCfg.Init();
            struCardCfg.dwSize            = (uint)Marshal.SizeOf(struCardCfg);
            struCardCfg.dwModifyParamType = 0x00001D8D;

            byte[] bCardNo = System.Text.Encoding.GetEncoding(PreSettings.charset).GetBytes(userInfo.CardNo);
            bCardNo.CopyTo(struCardCfg.byCardNo, 0);

            struCardCfg.byCardValid    = userInfo.CardValid;
            struCardCfg.byCardType     = (byte)userInfo.CardType;
            struCardCfg.byLeaderCard   = userInfo.IsLeaderCard;
            struCardCfg.byDoorRight[0] = userInfo.DoorRight[0];

            struCardCfg.wCardRightPlan[0] = 1;

            byte[] bName = System.Text.Encoding.GetEncoding(PreSettings.charset).GetBytes(userInfo.Name);
            bName.CopyTo(struCardCfg.byName, 0);

            struCardCfg.dwEmployeeNo  = userInfo.EmployeeNo;
            struCardCfg.wDepartmentNo = userInfo.DepartmentNo;

            byte[] bCardPassword = System.Text.Encoding.GetEncoding(PreSettings.charset).GetBytes(userInfo.CardPassword);
            bCardPassword.CopyTo(struCardCfg.byCardPassword, 0);

            struCardCfg.dwMaxSwipeTime = userInfo.MaxSwipeTime;
            struCardCfg.dwSwipeTime    = userInfo.SwipeTime;

            struCardCfg.struValid.byEnable = 0;

            return(struCardCfg);
        }
        /// <summary>
        /// 下发用户卡和人脸数据
        /// </summary>
        /// <param name="message"></param>
        /// <param name="deviceIPAddr"></param>
        /// <param name="devicePort"></param>
        /// <param name="cardNo"></param>
        /// <param name="employeeNo"></param>
        /// <param name="cardName"></param>
        /// <param name="departNo"></param>
        /// <param name="avatarUrl"></param>
        /// <param name="user"></param>
        /// <param name="password"></param>
        /// <returns></returns>
        public bool MemberEnroll(
            out string message,
            string deviceIPAddr,
            int devicePort,
            string cardNo,
            uint employeeNo,
            string cardName,
            ushort departNo,
            string avatarUrl,
            string user     = "******",
            string password = "******"
            )
        {
            bool ret = false;

            message = string.Empty;

            if (!avatarUrl.EndsWith(".jpg", true, System.Globalization.CultureInfo.InvariantCulture))
            {
                message = "人脸图片只支持JPG文件";
                return(false);
            }

            Stream stmAvatar = Core.Utility.StreamHelper.GetStreamFromUrl(avatarUrl);

            MemoryStream msAvatar = Core.Utility.StreamHelper.StreamToMemoryStream(stmAvatar);

            msAvatar.Seek(0, SeekOrigin.Begin);

            if (msAvatar.Length < 0 || msAvatar.Length > 200 * 1024)
            {
                message = "人脸文件不能大于200K";
                return(false);
            }

            Core.Domain.EntranceControl.UserInfo userInfo = new Core.Domain.EntranceControl.UserInfo();
            userInfo.CardNo       = cardNo;
            userInfo.EmployeeNo   = employeeNo;
            userInfo.Name         = cardName;
            userInfo.DepartmentNo = departNo;
            userInfo.CardType     = CHCNetSDK.CARD_TYPE.NORMAL;
            userInfo.CardPassword = "******";
            userInfo.Avator       = new byte[msAvatar.Length];
            msAvatar.Read(userInfo.Avator, 0, (int)msAvatar.Length);
            ret = MemberEnroll(out message, deviceIPAddr, devicePort, userInfo, user, password);

            return(ret);
        }
예제 #3
0
        /// <summary>
        /// 发送"卡数据"长连接数据
        /// </summary>
        /// <param name="hndStartRemoteConfig"></param>
        /// <param name="userInfo">卡号数据</param>
        /// <returns>TRUE表示成功,FALSE表示失败</returns>
        public bool SendRemoteConfigForCardInsert(
            int hndStartRemoteConfig,
            Core.Domain.EntranceControl.UserInfo userInfo)
        {
            bool ret      = false;
            uint dataType = (uint)CHCNetSDK.LONG_CFG_SEND_DATA_TYPE_ENUM.ENUM_ACS_SEND_DATA;

            //构建“卡参数配置结构体”结构体 并转化为指针
            CHCNetSDK.NET_DVR_CARD_CFG_V50 struCardCfg = BuildCardCfgStruct(userInfo);
            int    struCardCfgSize = Marshal.SizeOf(struCardCfg);
            IntPtr ptrCardCfg      = Marshal.AllocHGlobal(struCardCfgSize);

            Marshal.StructureToPtr(struCardCfg, ptrCardCfg, false);

            ret = CHCNetSDK.NET_DVR_SendRemoteConfig(hndStartRemoteConfig, dataType, ptrCardCfg, (uint)struCardCfgSize);

            Marshal.FreeHGlobal(ptrCardCfg);
            return(ret);
        }
        public void CardInsert()
        {
            CardManage srvCardManage = new CardManage();
            bool       ret           = false;
            string     message       = string.Empty;
            string     deviceIPAddr  = "127.0.0.1";
            int        port          = 8000;

            Core.Domain.EntranceControl.UserInfo userInfo = new Core.Domain.EntranceControl.UserInfo();
            userInfo.CardNo       = "123456";
            userInfo.EmployeeNo   = 123456;
            userInfo.Name         = "张三";
            userInfo.DepartmentNo = 123;
            userInfo.CardType     = CHCNetSDK.CARD_TYPE.NORMAL;
            userInfo.CardPassword = "******";
            string user     = "******";
            string password = "******";

            ret = srvCardManage.CardInsert(out message, deviceIPAddr, port, userInfo, user, password);
            Console.WriteLine(message);
            Assert.AreEqual(ret, true);
        }
        public void MemberEnroll()
        {
            string message      = string.Empty;
            bool   ret          = false;
            string deviceIPAddr = "127.0.0.1";
            int    port         = 8000;

            Core.Domain.EntranceControl.UserInfo userInfo = new Core.Domain.EntranceControl.UserInfo();
            userInfo.CardNo       = "123456";
            userInfo.EmployeeNo   = 123456;
            userInfo.Name         = "张三";
            userInfo.DepartmentNo = 123;
            userInfo.CardType     = CHCNetSDK.CARD_TYPE.NORMAL;
            userInfo.CardPassword = "******";
            string user     = "******";
            string password = "******";

            Application.EntranceControl.ControlGateway cw = new Application.EntranceControl.ControlGateway();
            ret = cw.MemberEnroll(out message, deviceIPAddr, port, userInfo.CardNo, userInfo.EmployeeNo, userInfo.Name, userInfo.DepartmentNo, "http://remote_addr/storage/123456.jpg", user, password);
            Console.WriteLine(message);
            //Assert.AreEqual(ret, true);
        }
예제 #6
0
        /// <summary>
        /// 下发卡号数据
        /// </summary>
        /// <param name="deviceUserId">NET_DVR_Login_V40等登录接口的返回值</param>
        /// <param name="cbStateCallback"></param>
        /// <param name="pUserData"></param>
        /// <param name="cardNo"></param>
        /// <returns></returns>
        public int StartRemoteConfigForCardInsert(
            int deviceUserId,
            CHCNetSDK.RemoteConfigCallback cbStateCallback,
            IntPtr pUserData,
            Core.Domain.EntranceControl.UserInfo userInfo
            )
        {
            int  handle  = -1;
            uint command = CHCNetSDK.NET_DVR_SET_CARD_CFG_V50;

            CHCNetSDK.NET_DVR_CARD_CFG_COND struCardCfgCond = BuildCardCfgCondStruct();

            int    struCardCfgCondSize = Marshal.SizeOf(struCardCfgCond);
            IntPtr ptrCardCfgCond      = Marshal.AllocHGlobal(struCardCfgCondSize);

            Marshal.StructureToPtr(struCardCfgCond, ptrCardCfgCond, false);

            handle = CHCNetSDK.NET_DVR_StartRemoteConfig(deviceUserId, command, ptrCardCfgCond, (uint)struCardCfgCondSize, cbStateCallback, pUserData);

            Marshal.FreeHGlobal(ptrCardCfgCond);

            return(handle);
        }
        public void FaceInsert()
        {
            FaceManage srvFaceManage = new FaceManage();
            bool       ret           = false;
            string     message       = string.Empty;
            string     deviceIPAddr  = "127.0.0.1";
            int        port          = 8000;

            Core.Domain.EntranceControl.UserInfo userInfo = new Core.Domain.EntranceControl.UserInfo();
            userInfo.CardNo       = "123456";
            userInfo.EmployeeNo   = 123456;
            userInfo.Name         = "张三";
            userInfo.DepartmentNo = 12;
            userInfo.CardType     = CHCNetSDK.CARD_TYPE.NORMAL;
            userInfo.CardPassword = "******";
            string user     = "******";
            string password = "******";

            using (FileStream fs = new FileStream("e:\\face-storage\\" + userInfo.CardNo + ".jpg", FileMode.OpenOrCreate))
            {
                if (fs.Length > 0 && fs.Length < 200 * 1024)
                {
                    userInfo.Avator = new byte[fs.Length];
                    fs.Read(userInfo.Avator, 0, (int)fs.Length);
                    ret = srvFaceManage.FaceInsert(out message, deviceIPAddr, port, userInfo, user, password);
                }
                else
                {
                    message = "人脸文件不能大于200K";
                    ret     = false;
                }
            }

            Console.WriteLine(message);
            //Assert.AreEqual(ret, true);
        }
        /// <summary>
        /// 下发卡数据
        /// </summary>
        /// <param name="message"></param>
        /// <param name="deviceIPAddr"></param>
        /// <param name="devicePort"></param>
        /// <param name="userInfo"></param>
        /// <param name="user"></param>
        /// <param name="password"></param>
        /// <param name="cbSetRemoteConfig"></param>
        /// <returns></returns>
        public bool CardInsert(
            out string message,
            string deviceIPAddr,
            int devicePort,
            Core.Domain.EntranceControl.UserInfo userInfo,
            string user     = "******",
            string password = "",
            CHCNetSDK.RemoteConfigCallback cbSetRemoteConfig = null)
        {
            bool ret = false;

            message = string.Empty;
            uint errCode = 0;
            int  iUserId = -1;
            //用户数据指针
            IntPtr ptrUserData = IntPtr.Zero;
            //长连接句柄
            int hndRemoteConfig = -1;
            //长连接数据发送是否成功
            bool retSendRemoteConfig  = false;
            bool retCloseRemoteConfig = false;

            #region init

            //初始化
            coreInfrastructure.NetDvrInit();

            //设置连接超时时间与重连功能
            //CHCNetSDK.NET_DVR_SetConnectTime(PreSettings.dwWaitTime, PreSettings.dwTryTimes);
            coreInfrastructure.NetDvrSetConnectTime(PreSettings.dwWaitTime, PreSettings.dwTryTimes);

            //CHCNetSDK.NET_DVR_SetReconnect(PreSettings.dwInterval, PreSettings.enableRecon);
            coreInfrastructure.NetDvrSetReconnect(PreSettings.dwInterval, PreSettings.enableRecon);

            #endregion

            #region login

            CHCNetSDK.NET_DVR_DEVICEINFO_V40 struDeviceInfoV40 = new CHCNetSDK.NET_DVR_DEVICEINFO_V40();

            //登录设备 Login the device
            iUserId = coreInfrastructure.NetDvrLoginV40(deviceIPAddr, devicePort, user, password, ref struDeviceInfoV40);

            if (iUserId < 0)
            {
                errCode = coreInfrastructure.NetDvrGetLastError();
                message = "NET_DVR_Login_V40 failed, error code= " + errCode; //登录失败,输出错误号
                coreInfrastructure.NetDvrCleanUp();
                return(false);
            }

            #endregion

            #region start remote config 启动长连接配置

            if (null == cbSetRemoteConfig)
            {
                SetRemoteConfigDelegate = new CHCNetSDK.RemoteConfigCallback(ProcessCardInsertCallback);
            }
            else
            {
                SetRemoteConfigDelegate = cbSetRemoteConfig;
            }

            hndRemoteConfig = logicCardManage.StartRemoteConfigForCardInsert(iUserId, GetRemoteConfigDelegate, ptrUserData, userInfo);

            if (hndRemoteConfig < 0)
            {
                errCode = coreInfrastructure.NetDvrGetLastError();
                message = "NET_DVR_StartRemoteConfig, error code= " + errCode; //登录失败,输出错误号
                coreInfrastructure.NetDvrCleanUp();
                return(false);
            }

            #endregion

            #region send remote config 发送长连接数据

            retSendRemoteConfig = logicCardManage.SendRemoteConfigForCardInsert(hndRemoteConfig, userInfo);

            if (!retSendRemoteConfig)
            {
                errCode = coreInfrastructure.NetDvrGetLastError();
                message = "NET_DVR_SendRemoteConfig, error code= " + errCode; //登录失败,输出错误号
                coreInfrastructure.NetDvrCleanUp();
                return(false);
            }

            #endregion

            System.Threading.Thread.Sleep(PreSettings.durationCallback);

            #region 获取数据

            ret = retSendRemoteConfig && errCode == 0;

            message = errCode + "";

            #endregion

            #region 关闭长连接配置接口所创建的句柄,释放资源

            if (bSetCardCfgFinish)
            {
                retCloseRemoteConfig = coreInfrastructure.NetDvrStopRemoteConfig(hndRemoteConfig);
            }

            bSetCardCfgFinish = false;

            #endregion


            //注销用户
            //CHCNetSDK.NET_DVR_Logout(iUserId);
            coreInfrastructure.NetDvrLogout(iUserId);
            //释放 SDK 资源
            //CHCNetSDK.NET_DVR_Cleanup();
            coreInfrastructure.NetDvrCleanUp();

            return(errCode == 0);
        }