222
This commit is contained in:
+28
-14
@@ -17,33 +17,47 @@ namespace IM_API.Application.EventHandlers.MessageCreatedHandler
|
||||
{
|
||||
private readonly IConversationService _conversationService;
|
||||
private readonly ILogger<ConversationEventHandler> _logger;
|
||||
private readonly ImContext _context;
|
||||
private readonly IMapper _mapper;
|
||||
private readonly IUserService _userSerivce;
|
||||
public ConversationEventHandler(
|
||||
IConversationService conversationService,
|
||||
ILogger<ConversationEventHandler> logger,
|
||||
ImContext imContext,
|
||||
IMapper mapper
|
||||
IUserService userService
|
||||
)
|
||||
{
|
||||
_conversationService = conversationService;
|
||||
_logger = logger;
|
||||
_context = imContext;
|
||||
_mapper = mapper;
|
||||
_userSerivce = userService;
|
||||
}
|
||||
|
||||
public async Task Consume(ConsumeContext<MessageCreatedEvent> context)
|
||||
{
|
||||
var @event = context.Message;
|
||||
await _conversationService.UpdateConversationAfterSentAsync(new Dtos.Conversation.UpdateConversationDto
|
||||
if (@event.ChatType == ChatType.GROUP)
|
||||
{
|
||||
LastMessage = @event.MessageContent,
|
||||
LastSequenceId = @event.SequenceId,
|
||||
ReceiptId = @event.MsgRecipientId,
|
||||
SenderId = @event.MsgSenderId,
|
||||
StreamKey = @event.StreamKey,
|
||||
DateTime = @event.MessageCreated
|
||||
});
|
||||
var userinfo = await _userSerivce.GetUserInfoAsync(@event.MsgSenderId);
|
||||
await _conversationService.UpdateConversationAfterSentAsync(new Dtos.Conversation.UpdateConversationDto
|
||||
{
|
||||
LastMessage = $"{userinfo.NickName}:{@event.MessageContent}",
|
||||
LastSequenceId = @event.SequenceId,
|
||||
ReceiptId = @event.MsgRecipientId,
|
||||
SenderId = @event.MsgSenderId,
|
||||
StreamKey = @event.StreamKey,
|
||||
DateTime = @event.MessageCreated
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
await _conversationService.UpdateConversationAfterSentAsync(new Dtos.Conversation.UpdateConversationDto
|
||||
{
|
||||
LastMessage = @event.MessageContent,
|
||||
LastSequenceId = @event.SequenceId,
|
||||
ReceiptId = @event.MsgRecipientId,
|
||||
SenderId = @event.MsgSenderId,
|
||||
StreamKey = @event.StreamKey,
|
||||
DateTime = @event.MessageCreated
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+2
-14
@@ -25,29 +25,17 @@ namespace IM_API.Application.EventHandlers.MessageCreatedHandler
|
||||
{
|
||||
Console.ForegroundColor = ConsoleColor.Red;
|
||||
var @event = context.Message;
|
||||
Console.WriteLine($"[SignalR]handlerCreated!");
|
||||
try
|
||||
{
|
||||
// 先转成实体,如果这一步都报错,说明之前的 sbyte -> enum 还没改好
|
||||
var entity = _mapper.Map<Message>(@event);
|
||||
|
||||
// 再从实体转 VO,这是最稳妥的路径,因为这两者的映射你肯定配过了
|
||||
var messageBaseVo = _mapper.Map<MessageBaseVo>(entity);
|
||||
|
||||
// 2. 打印日志确认逻辑执行到这里了
|
||||
Console.WriteLine($"[SignalR] 准备向所有人广播消息: {messageBaseVo.Content}");
|
||||
|
||||
// 3. 执行广播
|
||||
await _hub.Clients.User(@event.MsgRecipientId.ToString()).SendAsync("ReceiveMessage", new HubResponse<MessageBaseVo>("Event", messageBaseVo));
|
||||
|
||||
Console.WriteLine("[SignalR] 广播指令已发出");
|
||||
Console.ResetColor();
|
||||
await _hub.Clients.Group(@event.StreamKey).SendAsync("ReceiveMessage", new HubResponse<MessageBaseVo>("Event", messageBaseVo));
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine($"[SignalR] 发送失败: {ex.Message}");
|
||||
Console.ResetColor();
|
||||
throw; // 抛出异常触发 MassTransit 重试
|
||||
throw;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user