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 MassTransit; using Microsoft.AspNetCore.SignalR; namespace IM_API.Application.EventHandlers.MessageCreatedHandler { public class SignalREventHandler : IConsumer { private readonly IHubContext _hub; private readonly IMapper _mapper; public SignalREventHandler(IHubContext hub, IMapper mapper) { _hub = hub; _mapper = mapper; } public async Task Consume(ConsumeContext context) { var @event = context.Message; if (@event.ChatType == Models.ChatType.PRIVATE) { MessageBaseDto messageBaseDto = new MessageBaseDto { MsgId = @event.MessageId.ToString(), ChatType = @event.ChatType, Content = @event.MessageContent, GroupMemberId = null, ReceiverId = @event.MsgRecipientId, SenderId = @event.MsgSenderId, TimeStamp = @event.MessageCreated, Type = @event.MessageMsgType }; await _hub.Clients.Users(@event.MsgRecipientId.ToString()).SendAsync("ReceiveMessage", messageBaseDto); } } } }