using Kean.Domain.Message.Events; using Kean.Domain.Message.Repositories; using Kean.Domain.Message.Sockets; using System.Linq; using System.Threading; using System.Threading.Tasks; namespace Kean.Domain.Message.EventHandlers { /// /// 发送消息成功时,通知目标客户端 /// public sealed class SendMessageSuccessEventHandler_Notify : EventHandler { private readonly IMessageRepository _messageRepository; // 连接仓库 private readonly IOnlineSocket _onlineSocket; // 连接管道 /// /// 依赖注入 /// public SendMessageSuccessEventHandler_Notify( IMessageRepository messageRepository, IOnlineSocket onlineSocket) { _messageRepository = messageRepository; _onlineSocket = onlineSocket; } /// /// 处理程序 /// public override async Task Handle(SendMessageSuccessEvent @event, CancellationToken cancellationToken) { var connectionIds = @event.Targets .Select(i => _messageRepository.GetConnections(i)) .SelectMany(t => t.Result); if (connectionIds.Any()) { await _onlineSocket.Notify(connectionIds); } } } }