/// <summary> /// 用户登记上线; /// </summary> /// <returns></returns> public bool MarkLoginUserOnline() { var mutex = GetMutex(); try { mutex.WaitOne(15000);// 超时等待时间; int iOnlineUserCount = GetOnlineUserCount(); if (iOnlineUserCount < MAXUSERS) { var info = new OnlineUserInfo { SessionId = RCurrentSessionInfo.SessionId, LogId = RCurrentSessionInfo.LoginId, LogName = RCurrentSessionInfo.LoginName, Product = "", LoginTime = DateTime.Now, LastRefTime = DateTime.Now, IsKilled = false, }; // 同一用户在多客户端登录时,将其他客户端登录的用户标记为强制下线; IEnumerable <string> sessionIdArray = this.GetUserSeesionId(info.LogId); foreach (var s in sessionIdArray) { var killedInfo = GetOnlineUserInfo(s) as OnlineUserInfo; if (killedInfo != null) { // 将该用户信息标记为Killed强制下线; this.KilledOnlineUser(killedInfo.UniqueClientId); } } SaveOnlineUserInfoToCache(info.UniqueClientId, info); return(true); } else { throw new Exception("最大用户人数上线"); } } catch (Exception e) { EventLog.WriteEntry("OnlineUser.MarkUserOnline", e.Message); throw; } finally { mutex.Close(); } }
/// <summary> /// 移除当前登录用户信息; /// </summary> /// <returns></returns> public bool RemoveLoginUser() { lock (ObjLock) { OnlineUserInfo info = CurrentOnlineUserInfo(); if (info != null) { RemoveOnlineUserInfo(info.UniqueClientId); return(true); } return(false); } }
public void RefreshAll() { Hashtable dt = this.GetAllOnlineUserInfo(); lock (ObjLock) { IDictionaryEnumerator myEnumerator = dt.GetEnumerator(); while (myEnumerator.MoveNext()) { _lInfo = (OnlineUserInfo)myEnumerator.Value; if (DateTime.Now > _lInfo.LastRefTime.AddMinutes(5) || _lInfo.IsKilled)// 将超时或强制剔除的用户移除; { RemoveOnlineUserInfo(_lInfo.UniqueClientId); } } } }