using AutoMapper; using IM_API.Application.Interfaces; using IM_API.Domain.Events; using IM_API.Dtos; using IM_API.Hubs; using IM_API.Interface.Services; using IM_API.Models; using IM_API.Tools; using IM_API.VOs.Message; using MassTransit; using Microsoft.AspNetCore.SignalR; namespace IM_API.Application.EventHandlers.MessageCreatedHandler { public class SignalREventHandler : IConsumer { private readonly IHubContext _hub; private readonly IMapper _mapper; private readonly IUserService _userService; public SignalREventHandler(IHubContext hub, IMapper mapper,IUserService userService) { _hub = hub; _mapper = mapper; _userService = userService; } public async Task Consume(ConsumeContext context) { Console.ForegroundColor = ConsoleColor.Red; var @event = context.Message; try { var entity = _mapper.Map(@event); var messageBaseVo = _mapper.Map(entity); var senderinfo = await _userService.GetUserInfoAsync(@event.MsgSenderId); messageBaseVo.SenderName = senderinfo.NickName; messageBaseVo.SenderAvatar = senderinfo.Avatar ?? ""; await _hub.Clients.Group(@event.StreamKey).SendAsync("ReceiveMessage", new HubResponse("Event", messageBaseVo)); } catch (Exception ex) { Console.WriteLine($"[SignalR] 发送失败: {ex.Message}"); Console.ResetColor(); throw; } } } }