Example #1
0
        /// <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();
            }
        }
Example #2
0
        /// <summary>
        /// 移除当前登录用户信息;
        /// </summary>
        /// <returns></returns>
        public bool RemoveLoginUser()
        {
            lock (ObjLock)
            {
                OnlineUserInfo info = CurrentOnlineUserInfo();

                if (info != null)
                {
                    RemoveOnlineUserInfo(info.UniqueClientId);
                    return(true);
                }
                return(false);
            }
        }
Example #3
0
        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);
                    }
                }
            }
        }