网站首页 网站源码
namespace Dpz.Core.Web.Library;
[Obsolete]
public class ChatCurrentConnections
{
/// <summary>
/// 在线用户
/// </summary>
private static readonly Dictionary<string, VmUserInfo> ConnectionUsers = new Dictionary<string, VmUserInfo>();
private static readonly object LockObj = new object();
private static ChatCurrentConnections? _instance;
private ChatCurrentConnections() { }
public static ChatCurrentConnections GetInstance()
{
if (_instance != null) return _instance;
lock (LockObj)
{
_instance = new ChatCurrentConnections();
return _instance;
}
}
public VmUserInfo this[string index] => ConnectionUsers[index];
public void Add(string connectionId, VmUserInfo user)
{
lock (LockObj)
{
if (ConnectionUsers.ContainsKey(connectionId))
{
ConnectionUsers.Add(connectionId, user);
}
else
{
ConnectionUsers[connectionId] = user;
}
}
}
public VmUserInfo? Get(string connectionId)
{
if (!ConnectionUsers.TryGetValue(connectionId, out var user))
{
return null;
}
return user;
}
public void Remove(string connectionId)
{
if (ConnectionUsers.ContainsKey(connectionId))
{
//ConnectionUsers.Values.Any(x => x.Id == this[connectionId].Id)
lock (LockObj)
{
ConnectionUsers.Remove(connectionId);
}
}
}
public List<VmUserInfo> GetAllOnlineUsers()
{
lock (LockObj)
{
return ConnectionUsers.Select(x => x.Value).ToList();
}
}
}
上述代码定义了一个名为 ChatCurrentConnections
的类,它实现了一个单例模式,用于管理在线用户的连接信息。以下是代码的主要功能和结构的详细解释:
ChatCurrentConnections
类的主要目的是维护一个在线用户的连接列表,允许添加、获取和删除用户连接信息。它使用线程安全的方式来处理并发访问。
ConnectionUsers: 一个静态字典,键为连接 ID(string
),值为用户信息(VmUserInfo
)。这个字典存储了当前在线的用户。
LockObj: 一个静态对象,用于实现线程安全的锁定机制,确保在多线程环境中对 ConnectionUsers
的访问是安全的。
_instance: 一个静态字段,用于存储 ChatCurrentConnections
的单例实例。
GetInstance
方法获取实例。ChatCurrentConnections
的单例实例。如果实例尚未创建,则在锁定的情况下创建一个新实例。Add(string connectionId, VmUserInfo user): 添加或更新用户连接信息。如果连接 ID 已存在,则更新用户信息;否则,添加新的连接。
Get(string connectionId): 根据连接 ID 获取用户信息。如果连接 ID 不存在,则返回 null
。
Remove(string connectionId): 根据连接 ID 移除用户信息。如果连接 ID 存在,则从字典中删除对应的用户信息。
GetAllOnlineUsers(): 返回当前所有在线用户的列表。该方法会返回 ConnectionUsers
字典中所有用户信息的列表。
所有对 ConnectionUsers
字典的修改和访问都被锁定在 LockObj
对象上,以确保在多线程环境中不会出现数据竞争或不一致的状态。
ChatCurrentConnections
类是一个用于管理在线用户连接的单例类,提供了线程安全的方法来添加、获取和删除用户信息。它的设计使得在多线程环境中能够安全地操作用户连接数据。