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