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