XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFEExtension

【DLL】XFE各类拓展是一个C#的DLL库,旨在优化C#代码中常用语句的使用,并提供更简洁的访问方式,同时提供Xunit测试框架,快速搭建服务器/客户端,免费ChatGPTAPI接口,免费通讯服务器,XFE下载器,新增格式等

公开
关注 0 Fork 0 Star 0
UTF-8
using System.Net.WebSockets;

namespace XFEExtension.NetCore.CyberComm;

/// <summary>
/// CyberComm客户端群组
/// </summary>
public class CyberCommGroup
{
    private readonly List<CyberCommServerEventArgs> _cyberCommList = [];
    /// <summary>
    /// 组ID
    /// </summary>
    public string GroupId { get; set; }
    /// <summary>
    /// 添加客户端
    /// </summary>
    /// <param name="e">客户端</param>
    public void Add(CyberCommServerEventArgs e)
    {
        _cyberCommList.Add(e);
    }
    /// <summary>
    /// 移除指定的客户端
    /// </summary>
    /// <param name="webSocket">客户端</param>
    public void Remove(WebSocket webSocket)
    {
        var cyberCommServerEventArgs = _cyberCommList.Find(x => x.CurrentWebSocket == webSocket);
        if (cyberCommServerEventArgs is not null)
            _cyberCommList.Remove(cyberCommServerEventArgs);
    }
    /// <summary>
    /// 移除指定索引的客户端
    /// </summary>
    /// <param name="index">客户单索引</param>
    public void RemoveAt(int index)
    {
        _cyberCommList.RemoveAt(index);
    }
    /// <summary>
    /// 清空列表
    /// </summary>
    public void Clear()
    {
        _cyberCommList.Clear();
    }
    /// <summary>
    /// 群组客户端数量
    /// </summary>
    public int Count
    {
        get
        {
            return _cyberCommList.Count;
        }
    }
    /// <summary>
    /// 索引器
    /// </summary>
    /// <param name="findFunc">查找</param>
    /// <returns>客户端</returns>
    public CyberCommServerEventArgs? this[Predicate<CyberCommServerEventArgs> findFunc]
    {
        get
        {
            return _cyberCommList.Find(findFunc);
        }
    }
    /// <summary>
    /// 发送群组文本消息
    /// </summary>
    /// <param name="message">群发文本消息</param>
    public async Task SendGroupTextMessage(string message)
    {
        List<Task> tasks = [];
        foreach (var cyberCommServerEventArgs in _cyberCommList)
        {
            tasks.Add(cyberCommServerEventArgs.ReplyMessage(message));
        }
        await Task.WhenAll(tasks);
    }
    /// <summary>
    /// 向指定的WS客户端发送群组文本消息
    /// </summary>
    /// <param name="message">群发文本消息</param>
    /// <param name="findFunc">指定的WS客户端</param>
    public async Task SendGroupTextMessage(string message, Func<CyberCommServerEventArgs, bool> findFunc)
    {
        List<Task> tasks = [];
        foreach (var cyberCommServerEventArgs in _cyberCommList)
        {
            if (findFunc.Invoke(cyberCommServerEventArgs))
            {
                tasks.Add(cyberCommServerEventArgs.ReplyMessage(message));
            }
        }
        await Task.WhenAll(tasks);
    }
    /// <summary>
    /// 发送群组二进制消息
    /// </summary>
    /// <param name="bytes">群发二进制消息</param>
    public async Task SendGroupBinaryMessage(byte[] bytes)
    {
        List<Task> tasks = [];
        foreach (var cyberCommServerEventArgs in _cyberCommList)
        {
            tasks.Add(cyberCommServerEventArgs.ReplyBinaryMessage(bytes));
        }
        await Task.WhenAll(tasks);
    }
    /// <summary>
    /// 向指定的WS客户端发送群组二进制消息
    /// </summary>
    /// <param name="bytes">群发二进制消息</param>
    /// <param name="findFunc">指定的WS客户端</param>
    public async Task SendGroupBinaryMessage(byte[] bytes, Func<CyberCommServerEventArgs, bool> findFunc)
    {
        List<Task> tasks = [];
        foreach (var cyberCommServerEventArgs in _cyberCommList)
        {
            if (findFunc.Invoke(cyberCommServerEventArgs))
            {
                tasks.Add(cyberCommServerEventArgs.ReplyBinaryMessage(bytes));
            }
        }
        await Task.WhenAll(tasks);
    }
    /// <summary>
    /// 客户端群组
    /// </summary>
    /// <param name="groupId">群组ID</param>
    public CyberCommGroup(string groupId)
    {
        this.GroupId = groupId;
    }
    /// <summary>
    /// 客户端群组
    /// </summary>
    /// <param name="groupId">群组ID</param>
    /// <param name="cyberCommList">客户端群组</param>
    public CyberCommGroup(string groupId, List<CyberCommServerEventArgs> cyberCommList)
    {
        this.GroupId = groupId;
        this._cyberCommList = cyberCommList;
    }
}