using System.Collections.Concurrent; namespace ZhiYi.Core.Application.Services.Implements { /// /// 客户端连接管理 /// public class ConnectionClientManagerService : IConnectionClientManagerService { private ConcurrentDictionary dic = new(); /// /// 添加客户端 /// /// 客户端ID /// /// public Task AddAsync(string clientId, IWebSocket webSocket) { if (!clientId.IsNullOrEmpty()) { dic.AddOrUpdate(clientId, webSocket); } return Task.CompletedTask; } /// /// 指定客户端发送消息 /// /// 客户端ID /// 消息内容 /// public async Task SendAsync(string clientId, string message) { if (dic.TryGetValue(clientId, out var webSocket)) { await webSocket.SendAsync(message); return true; } return false; } /// /// 广播消息 /// /// /// public async Task SendAllAsync(string message) { if (dic.Count > 0) { foreach (var d in dic) { await d.Value.SendAsync(message); } return true; } return false; } /// /// 移除客户端并释放资源 /// /// 客户端ID /// public Task RemoveAsync(string clientId) { if(dic.TryRemove(clientId,out var webSocket)) { webSocket.SafeDispose(); } return Task.CompletedTask; } } }