/// <summary> /// 设备用户登录/注销处理 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnUserLogin_Click(object sender, EventArgs e) { string strLogin = StringUtil.ConvertString("设备用户登录"); string strLogout = StringUtil.ConvertString("设备用户注销"); if (btnUserLogin.Text.Equals(strLogin)) { frm_AddDevice fLogin = new frm_AddDevice(); fLogin.ShowDialog(); if (fLogin.blnOKEnter == true) { //设备用户信息获得 NET_DEVICEINFO deviceInfo = new NET_DEVICEINFO(); int error = 0; //设备用户登录 pLoginID = DHClient.DHLogin(fLogin.cmbDevIP.Text.ToString(), ushort.Parse(fLogin.txtDevProt.Text.ToString()), fLogin.txtName.Text.ToString(), fLogin.txtPassword.Text.ToString(), out deviceInfo, out error); if (pLoginID != 0) { btnUserLogin.BackColor = Color.Yellow; btnUserLogin.Text = strLogout; grpMain.Enabled = true; //读取用户信息 GetUserInfo(pLoginID, ref userManageInfo, 3000); //设置消息回调函数 DHClient.DHSetDVRMessCallBack(msgCallBack, IntPtr.Zero); IntPtr pVer = new IntPtr(); pVer = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(int))); int nRet = 0; int nVer = 0; bool bRet = DHClient.DHQueryDevState((int)pLoginID, (int)DHClient.DH_DEVSTATE_PROTOCAL_VER, pVer, 4, ref nRet, 2000); if (bRet) { nVer = (int)Marshal.PtrToStructure((IntPtr)((UInt32)pVer), typeof(int)); //开始侦听 if (nVer >= 5) { if (DHClient.DHStartListenEx(pLoginID) == true) { timeDisplayAlarmInfo.Enabled = true; } else { timeDisplayAlarmInfo.Enabled = false; } } else { if (DHClient.DHStartListen(pLoginID) == true) { timeDisplayAlarmInfo.Enabled = true; } else { timeDisplayAlarmInfo.Enabled = false; } } } } } } else { bool result = DHClient.DHLogout(pLoginID); if (result == false) { //报最后一次操作的错误信息 MessageBox.Show(DHClient.LastOperationInfo.ToString(pErrInfoFormatStyle), pMsgTitle); } //画面初期化 timeDisplayAlarmInfo.Enabled = false; this.Controls.Clear(); InitializeComponent(); StringUtil.InitControlText(this); pLoginID = 0; userManageInfo = new USER_MANAGE_INFO(); clientState = new NET_CLIENT_STATE(); AlarmAudio = new byte[16]; AlarmDiskErr = new byte[32];//DVR最大可挂32块硬盘,每一位表示一个硬盘的状态,0:硬盘状态正常;1:硬盘出错 AlarmDiskFull = false; AlarmShelter = new byte[16]; AlarmExternal = new byte[16]; ActiveUserID = 0; ActiveGroupID = 0; ActiveGroupIndex = 0; ActiveUserIndex = 0; btnUserLogin.BackColor = Color.Transparent; btnUserLogin.Text = strLogin; grpMain.Enabled = false; this.WindowState = FormWindowState.Normal; } }
/// <summary> /// 获取报警信息处理 /// </summary> /// <param name="lCommand">命令</param> /// <param name="lLoginID">登录ID</param> /// <param name="pBuf">缓存</param> /// <param name="dwBufLen">缓存数据大小</param> /// <param name="pchDVRIP">DVR设备IP地址</param> /// <param name="nDVRPort">DVR设备端口</param> /// <param name="dwUser">用户数据</param> /// <returns></returns> private bool GetAlarmMessage(int lCommand, int lLoginID, IntPtr pBuf, UInt32 dwBufLen, IntPtr pchDVRIP, int nDVRPort, UInt32 dwUser) { bool returnValue = false; //MessageBox.Show("HI1"); switch (lCommand) { case (int)CALLBACK_TYPE.DH_COMM_ALARM://常规报警信息 cbkType = CALLBACK_TYPE.DH_COMM_ALARM; clientState = (NET_CLIENT_STATE)Marshal.PtrToStructure(pBuf, typeof(NET_CLIENT_STATE)); #region << 测试代码 >> #endregion break; case (int)CALLBACK_TYPE.DH_SHELTER_ALARM://视频遮档报警 cbkType = CALLBACK_TYPE.DH_SHELTER_ALARM; for (int i = 0; i < dwBufLen; i++) { AlarmShelter[i] = (byte)Marshal.PtrToStructure((IntPtr)((UInt32)pBuf + i), typeof(byte)); } break; case (int)CALLBACK_TYPE.DH_DISK_FULL_ALARM://硬盘空间不足 cbkType = CALLBACK_TYPE.DH_DISK_FULL_ALARM; AlarmDiskFull = (bool)Marshal.PtrToStructure(pBuf, typeof(bool)); break; case (int)CALLBACK_TYPE.DH_DISK_ERROR_ALARM://硬盘损坏 cbkType = CALLBACK_TYPE.DH_DISK_ERROR_ALARM; for (int i = 0; i < dwBufLen; i++) { AlarmDiskErr[i] = (byte)Marshal.PtrToStructure((IntPtr)((UInt32)pBuf + i), typeof(byte)); } break; case (int)CALLBACK_TYPE.DH_SOUND_DETECT_ALARM://音频报警 cbkType = CALLBACK_TYPE.DH_SOUND_DETECT_ALARM; for (int i = 0; i < dwBufLen; i++) { AlarmAudio[i] = (byte)Marshal.PtrToStructure((IntPtr)((UInt32)pBuf + i), typeof(byte)); } break; case (int)CALLBACK_TYPE.DH_ALARM_ALARM_EX://外部报警 cbkType = CALLBACK_TYPE.DH_ALARM_ALARM_EX; for (int i = 0; i < dwBufLen; i++) { AlarmExternal[i] = (byte)Marshal.PtrToStructure((IntPtr)((UInt32)pBuf + i), typeof(byte)); } break; } return returnValue; }
/// <summary> /// 设备用户登录/注销处理 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnUserLogin_Click(object sender, EventArgs e) { switch (btnUserLogin.Text) { case "设备用户登录": frm_AddDevice fLogin = new frm_AddDevice(); fLogin.ShowDialog(); if (fLogin.blnOKEnter == true) { //设备用户信息获得 NET_DEVICEINFO deviceInfo = new NET_DEVICEINFO(); int error = 0; //设备用户登录 pLoginID = DHClient.DHLogin(fLogin.cmbDevIP.Text.ToString(), ushort.Parse(fLogin.txtDevProt.Text.ToString()), fLogin.txtName.Text.ToString(), fLogin.txtPassword.Text.ToString(), out deviceInfo, out error); if (pLoginID != 0) { btnUserLogin.BackColor = Color.Yellow; btnUserLogin.Text = "设备用户注销"; grpMain.Enabled = true; //读取用户信息 GetUserInfo(pLoginID, ref userManageInfo, 3000); //设置消息回调函数 DHClient.DHSetDVRMessCallBack(msgCallBack, IntPtr.Zero); //开始侦听 if (DHClient.DHStartListen(pLoginID) == true) { timeDisplayAlarmInfo.Enabled = true; } else { timeDisplayAlarmInfo.Enabled = false; } } } break; case "设备用户注销": bool result = DHClient.DHLogout(pLoginID); if (result == false) { //报最后一次操作的错误信息 MessageBox.Show(DHClient.LastOperationInfo.ToString(pErrInfoFormatStyle), pMsgTitle); } //画面初期化 timeDisplayAlarmInfo.Enabled = false; this.Controls.Clear(); InitializeComponent(); pLoginID = 0; userManageInfo = new USER_MANAGE_INFO(); clientState = new NET_CLIENT_STATE(); AlarmAudio = new byte[16]; AlarmDiskErr = new byte[32];//DVR最大可挂32块硬盘,每一位表示一个硬盘的状态,0:硬盘状态正常;1:硬盘出错 AlarmDiskFull = false; AlarmShelter = new byte[16]; ActiveUserID = 0; ActiveGroupID = 0; ActiveGroupIndex = 0; ActiveUserIndex = 0; btnUserLogin.BackColor = Color.Transparent; btnUserLogin.Text = "设备用户登录"; grpMain.Enabled = false; this.WindowState = FormWindowState.Normal; break; } }