Exemplo n.º 1
0
        public bool LoginCommand(IConnection conn, UserDto dto)
        {
            UserDto _dto; //更新在线用户列表   //没有判断同一个账号在不同客户端同时登录的情况

            if (CurrentClient.TryGetValue(conn.ConnectionID, out _dto))
            {
                dto.ConnectionID = conn.ConnectionID;
                dto.BeatTime     = DateTime.Now;
                dto.IpAddress    = conn.RemoteEndPoint.ToString();
                dto.ConnectTime  = _dto.ConnectTime;
                dto.IsLogin      = true;
                CurrentClient.TryUpdate(conn.ConnectionID, dto, _dto);
                //return true;
            }
            try
            {
                AppLog.WriteLog(dto.DeptName + dto.StaffName + "使用" + dto.UserName + "登录系统");
                using (FMDBEntities db = new FMDBEntities())
                {
                    var OnlineLoginID = CurrentClient.Values.Select(i => i.LoginID).ToList();

                    var loginedmodel = db.System_Login.Where(i => OnlineLoginID.Contains(i.LoginID)).ToList();
                    foreach (var model in loginedmodel)
                    {
                        if (model != null)
                        {
                            if (model.IsOnline == null || model.IsOnline == false) //更新数据库中已登录的账户的状态
                            {
                                model.IsOnline = true;
                            }
                            model.IP = CurrentClient.Values.First(t => t.LoginID == model.LoginID).IpAddress;
                        }
                    }
                    var OffLine = db.System_Login.Where(i => i.StatusValue == 1 && !OnlineLoginID.Contains(i.LoginID)).ToList();
                    foreach (var offlinesuer in OffLine)
                    {
                        if (offlinesuer != null)
                        {
                            if (offlinesuer.IsOnline == true || offlinesuer.IsOnline == null)//更新数据库中未登录的账户的状态,防止server崩溃后,用户也下线了,当再次启动服务的时候该用户的在线的状态一直不会被改变一直处于在线状态
                            {
                                offlinesuer.IsOnline = false;
                            }
                        }
                    }
                    db.SaveChanges();
                }
            }
            catch (Exception ex)
            {
                //DisplayMsg(ex.StackTrace);
                AppLog.WriteLog("用户登录后修改数据库值出错" + ex.StackTrace);
                //throw;
            }
            return(true);//todo:需要登陆验证
        }
Exemplo n.º 2
0
        public void DisconnectionCommand(IConnection conn)
        {
            UserDto _dto;

            CurrentClient.TryRemove(conn.ConnectionID, out _dto);
            DisplayMsg(string.Format(" 用户 {0} ({1}) 断开链接了 ", _dto.UserName, _dto.StaffName));
            using (FMDBEntities db = new FMDBEntities())
            {
                var model = db.System_Login.FirstOrDefault(i => i.LoginID == _dto.LoginID);
                if (model != null)
                {
                    model.IsOnline = false;
                }
                db.SaveChanges();
            }
        }