//得到当前状态的心跳 public HttpHeartBeat GetHeartBeatByCurrent() { HttpHeartBeat sendHeartBeat = null; //不属于未注册状态 SetterDAO setterDAO = new SetterDAO(); Setter setter = setterDAO.getSetter(); if (setterDAO.ListAll().Count != 1) { //设置表没有唯一标识,直接返回 return(null); } //需要加入解密逻辑 string mac = ""; //获得当前主机的mac地址 mac = SystemInfo.GetMacAddress().Replace(":", "-"); AuthDAO authDAO = new AuthDAO(); var result = authDAO.GetByAuthLevel(Auther.AUTH_LEVEL_MANAGER); //注册用户设置mac与用户名 //TODO设置mac地址不能从本地拿,必须实时获取 sendHeartBeat = new HttpHeartBeat(result.Auth_UserName, mac); if (result.User_Status == Auther.USER_STATUS_FREEZE) { //是否为冻结状态的心跳,这里不能从数据库取,否则,云通知本地锁死,本地改状态后,会再次通知云锁死本机,陷入死循环 sendHeartBeat.heartbeatType = 1; sendHeartBeat.authStatus = 0; } else if (result.User_Status == Auther.USER_STATUS_FREE) { //是否完全离线 sendHeartBeat.heartbeatType = 2; sendHeartBeat.authStatus = 0; } else { //默认为正常心跳 sendHeartBeat.heartbeatType = 0; sendHeartBeat.authStatus = 0; } return(sendHeartBeat); }
/// <summary> /// 根据web传来的心跳信息,做操作 /// </summary> /// <param name="httpHeartBeat"></param> public void SolveHeartbeat(HttpHeartBeat httpHeartBeat) { AuthDAO authDAO = new AuthDAO(); Auther auther = authDAO.GetByAuthLevel(Auther.AUTH_LEVEL_MANAGER); if (httpHeartBeat.authStatus == 0) { //0权限操作位 不作处理,属于正常心跳 //解锁 auther.User_Status = Auther.USER_STATUS_GENERAL; } else if (httpHeartBeat.authStatus == 1) { //锁定 auther.User_Status = Auther.USER_STATUS_FREEZE; } else if (httpHeartBeat.authStatus == 2) { //解锁 auther.User_Status = Auther.USER_STATUS_GENERAL; } else if (httpHeartBeat.authStatus == 3) { //永久离线至9999年 auther.User_Status = Auther.USER_STATUS_FREE; auther.Auth_OfflineTime = Auther.Auth_OFFLINETIMEFREE; } else if (httpHeartBeat.authStatus == 4) { //删除用户,做冻结处理 auther.User_Status = Auther.USER_STATUS_FREEZE; } authDAO.UpdateByPrimaryKey(auther); //插入至上传表 UploadManagementDAO uploadManagementDao = new UploadManagementDAO(); uploadManagementDao.Insert(new UploadManagement(auther.Pk_Auth_Id, "bdl_auth", 1)); }
/// <summary> /// 异步进程与UI更新 /// </summary> #region 绑定通知公告 private void BindNotice() { System.Threading.Tasks.Task.Factory.StartNew(() => { try { //如果用户没有被上传则return,不允许发心跳,否则就按照不合法冻结了 if (new UploadManagementDAO().CheckExistAuth() != null) { return; } HeartBeatOffice heartBeatOffice = new HeartBeatOffice(); HttpHeartBeat result = heartBeatOffice.GetHeartBeatByCurrent(); //心跳直接上传 !HttpSender.Ping() || if (result == null) { //如果没有取到值 return; } string jsonStr = HttpSender.POSTByJsonStr("communicationController/analysisJson", JsonTools.Obj2JSONStrNew <HttpHeartBeat>(result)); HttpHeartBeat webResult = JsonTools.DeserializeJsonToObject <HttpHeartBeat>(jsonStr); //本地数据更改 if (webResult == null) { return; } heartBeatOffice.SolveHeartbeat(webResult); Dispatcher.Invoke(new Action(() => { if (webResult.authStatus == 0) { //正常心跳不处理 } else if (webResult.authStatus == 1) { //冻结,弹窗,然后关闭窗口 // 程序强制退出 authDao.UpdateByUserName(webResult.username, 1); // 停止定时器 timerNotice.Stop(); MessageBoxX.Warning(LanguageUtils.ConvertLanguage("用户被冻结,即将退出,请联系宝德龙管理员解冻!", "The user is frozen, will exit, please contact the administrator thaw!")); Environment.Exit(0); } else if (webResult.authStatus == 2) { //解冻,只需要更改数据库。界面无反馈,不处理 //authDao.UpdateByUserName(webResult.username, 2); } else if (webResult.authStatus == 3) { //永久离线,只需要更改数据库。界面无反馈,不处理 //authDao.UpdateByUserName(webResult.username, 3); } else if (webResult.authStatus == 4) { //已删除,按照冻结处理 //authDao.UpdateByUserName(webResult.username, 1); timerNotice.Stop(); MessageBoxX.Warning(LanguageUtils.ConvertLanguage("用户被删除,即将退出,请联系宝德龙管理员恢复!", "The user is removed, will exit, please contact the administrator to restore!")); Environment.Exit(0); } })); } catch { } }); }