/// <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); }
/// <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); }
/// <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); }