123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206 |
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using CB.TVUCenter.Config;
- using CB.TVUCenter.Entity;
- namespace CB.TVUCenter.Data
- {
- public class OnlineUsers
- {
- /// <summary>
- /// 在线用户列表
- /// </summary>
- public static IList<OnlineUserInfo> onlineUserList = new List<OnlineUserInfo>();
- /// <summary>
- /// 锁定用户列表
- /// </summary>
- public static IList<OnlineUserInfo> lockUserList = new List<OnlineUserInfo>();
- #region 测试
- static OnlineUsers()
- {
- //onlineUserList.Add(new OnlineUserInfo()
- //{
- // UserName = "00-00-00-00-00-00-00-E0",
- // Sign = "00000000000000E0",
- // RequestTime = DateTime.Now
- //});
- //onlineUserList.Add(new OnlineUserInfo()
- //{
- // UserName = "FF-00-00-00-00-00-00-E0",
- // Sign = "FF000000000000E0",
- // RequestTime = DateTime.Now
- //});
- //lockUserList.Add(new OnlineUserInfo() { UserName = "FF-00-00-00-00-00-00-E0" });
- }
- #endregion
- private static object lockObject = new object();
- /// <summary>
- /// 检查用户是否锁定
- /// </summary>
- /// <param name="user"></param>
- /// <returns></returns>
- public static bool CheckUserLock(OnlineUserInfo user)
- {
- ClearLockOnlineUser();
- if (IsLockUser(user.UserName))
- return true;
- lock (lockObject)
- {
- if (TVConfigs.GetConfig().ApiCallTimes < UserApiCycle(user))
- {
- lock (lockObject)
- {
- lockUserList.Add(new OnlineUserInfo()
- {
- UserName = user.UserName,
- Sign = user.Sign,
- RequestTime = user.RequestTime
- });
- }
- CB.Common.FileUtil.WriteLog("用户被锁定");
- return true;
- }
- }
- return false;
- }
- /// <summary>
- /// 判断用户是否是锁定用户
- /// </summary>
- /// <param name="userName"></param>
- /// <returns></returns>
- private static bool IsLockUser(string userName)
- {
- foreach (var item in lockUserList)
- {
- if (item.UserName == userName)
- return true;
- }
- return false;
- }
- /// <summary>
- /// 清楚过期锁定用户
- /// </summary>
- private static void ClearLockOnlineUser()
- {
- lock (lockObject)
- {
- var now = DateTime.Now;
- IList<OnlineUserInfo> _user = new List<OnlineUserInfo>();
- foreach (var item in lockUserList)
- {
- if (item.RequestTime.AddMinutes(TVConfigs.GetConfig().UnLockTime) >= now)
- _user.Add(item);
- }
- lockUserList = _user;
- }
- }
- /// <summary>
- /// 用户访问API频率
- /// </summary>
- /// <param name="user"></param>
- /// <returns>0:首次访问用户;用户访问频率</returns>
- private static int UserApiCycle(OnlineUserInfo user)
- {
- ClearOnlineUser();
- return UpdateOnlineUser(user);
- }
- /// <summary>
- /// 更新在线用户信息,并返回用户访问API频率
- /// </summary>
- /// <param name="user"></param>
- /// <returns>用户每分钟访问API接口频率</returns>
- public static int UpdateOnlineUser(OnlineUserInfo user)
- {
- lock (lockObject)
- {
- onlineUserList.Add(new OnlineUserInfo()
- {
- UserName = user.UserName,
- Sign = user.Sign,
- RequestTime = user.RequestTime
- });
- int userCount = 0;
- var now = DateTime.Now;
- foreach (var item in onlineUserList)
- {
- if (user.UserName == item.UserName && user.RequestTime.AddMinutes(TVConfigs.GetConfig().ApiCallCycle) >= now)
- userCount++;
- }
- return userCount / TVConfigs.GetConfig().ApiCallCycle;
- }
- }
- /// <summary>
- /// 清楚过期用户
- /// </summary>
- /// <param name="user"></param>
- private static void ClearOnlineUser()
- {
- lock (lockObject)
- {
- var now = DateTime.Now;
- IList<OnlineUserInfo> _user = new List<OnlineUserInfo>();
- foreach (var item in onlineUserList)
- {
- if (item.RequestTime.AddMinutes(TVConfigs.GetConfig().ClearOnlineUserTime) >= now)
- _user.Add(item);
- }
- onlineUserList = _user;
- }
- }
- /// <summary>
- /// 手动锁定用户
- /// </summary>
- /// <param name="User">要锁定的用户</param>
- public static bool AdminLockOnlineUser(OnlineUserInfo User)
- {
- lock (lockObject)
- {
- bool isExist = false;
- foreach (var Item in lockUserList)
- {
- if (Item.UserName == User.UserName)
- {
- isExist = true;
- }
- }
- if (!isExist)
- {
- lockUserList.Add(User);
- return true;
- }
- return false;
- }
- }
- /// <summary>
- /// 手动解锁用户
- /// </summary>
- /// <param name="User">要解锁的用户</param>
- public static bool AdminUnLockOnlineUser(OnlineUserInfo User)
- {
- lock (lockObject)
- {
- foreach (var item in lockUserList)
- {
- if (item.UserName == User.UserName)
- {
- return lockUserList.Remove(item);
- }
- }
- return false;
- }
- }
- }
- }
|