网站首页 网站源码
website
站点相关全部源代码,隐藏了一些关于服务器的信息
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();
        }
    }
}
⚠⚠    以下内容为AI分析的结果,请根据实际情况进行判断。

上述代码定义了一个名为 ChatCurrentConnections 的类,它实现了一个单例模式,用于管理在线用户的连接信息。以下是代码的主要功能和结构的详细解释:

1. 类的目的

ChatCurrentConnections 类的主要目的是维护一个在线用户的连接列表,允许添加、获取和删除用户连接信息。它使用线程安全的方式来处理并发访问。

2. 主要成员

  • ConnectionUsers: 一个静态字典,键为连接 ID(string),值为用户信息(VmUserInfo)。这个字典存储了当前在线的用户。

  • LockObj: 一个静态对象,用于实现线程安全的锁定机制,确保在多线程环境中对 ConnectionUsers 的访问是安全的。

  • _instance: 一个静态字段,用于存储 ChatCurrentConnections 的单例实例。

3. 构造函数

  • ChatCurrentConnections(): 私有构造函数,防止外部实例化该类,确保只能通过 GetInstance 方法获取实例。

4. 单例模式

  • GetInstance(): 静态方法,用于获取 ChatCurrentConnections 的单例实例。如果实例尚未创建,则在锁定的情况下创建一个新实例。

5. 索引器

  • this[string index]: 索引器,允许通过连接 ID 获取对应的用户信息。

6. 方法

  • Add(string connectionId, VmUserInfo user): 添加或更新用户连接信息。如果连接 ID 已存在,则更新用户信息;否则,添加新的连接。

  • Get(string connectionId): 根据连接 ID 获取用户信息。如果连接 ID 不存在,则返回 null

  • Remove(string connectionId): 根据连接 ID 移除用户信息。如果连接 ID 存在,则从字典中删除对应的用户信息。

  • GetAllOnlineUsers(): 返回当前所有在线用户的列表。该方法会返回 ConnectionUsers 字典中所有用户信息的列表。

7. 线程安全

所有对 ConnectionUsers 字典的修改和访问都被锁定在 LockObj 对象上,以确保在多线程环境中不会出现数据竞争或不一致的状态。

8. 过时标记

  • [Obsolete]: 该类被标记为过时,意味着它可能在未来的版本中被移除或不再推荐使用。开发者应该考虑使用其他替代方案。

总结

ChatCurrentConnections 类是一个用于管理在线用户连接的单例类,提供了线程安全的方法来添加、获取和删除用户信息。它的设计使得在多线程环境中能够安全地操作用户连接数据。

loading