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 (var 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 (var 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 (var 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 (var 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; } }