43 lines
1.3 KiB
C#
43 lines
1.3 KiB
C#
using AutoMapper;
|
|
using IM_API.Application.Interfaces;
|
|
using IM_API.Domain.Events;
|
|
using IM_API.Dtos;
|
|
using IM_API.Hubs;
|
|
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<MessageCreatedEvent>
|
|
{
|
|
private readonly IHubContext<ChatHub> _hub;
|
|
private readonly IMapper _mapper;
|
|
public SignalREventHandler(IHubContext<ChatHub> hub, IMapper mapper)
|
|
{
|
|
_hub = hub;
|
|
_mapper = mapper;
|
|
}
|
|
|
|
public async Task Consume(ConsumeContext<MessageCreatedEvent> context)
|
|
{
|
|
Console.ForegroundColor = ConsoleColor.Red;
|
|
var @event = context.Message;
|
|
try
|
|
{
|
|
var entity = _mapper.Map<Message>(@event);
|
|
var messageBaseVo = _mapper.Map<MessageBaseVo>(entity);
|
|
await _hub.Clients.Group(@event.StreamKey).SendAsync("ReceiveMessage", new HubResponse<MessageBaseVo>("Event", messageBaseVo));
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Console.WriteLine($"[SignalR] 发送失败: {ex.Message}");
|
|
Console.ResetColor();
|
|
throw;
|
|
}
|
|
}
|
|
}
|
|
}
|