diff --git a/backend/IM_API/Hubs/ChatHub.cs b/backend/IM_API/Hubs/ChatHub.cs index 960af7e..759f1e6 100644 --- a/backend/IM_API/Hubs/ChatHub.cs +++ b/backend/IM_API/Hubs/ChatHub.cs @@ -1,5 +1,6 @@ using IM_API.Dtos; using IM_API.Interface.Services; +using IM_API.Models; using IM_API.Tools; using Microsoft.AspNetCore.SignalR; using System.Security.Claims; @@ -32,7 +33,7 @@ namespace IM_API.Hubs } await base.OnConnectedAsync(); } - public async Task SendPrivateMessage(MessageBaseDto dto) + public async Task SendMessage(MessageBaseDto dto) { if (!Context.User.Identity.IsAuthenticated) { @@ -41,8 +42,17 @@ namespace IM_API.Hubs return; } var userIdStr = Context.User.FindFirstValue(ClaimTypes.NameIdentifier); - await _messageService.SendPrivateMessageAsync(int.Parse(userIdStr),dto.ReceiverId,dto); - await Clients.Users(dto.ReceiverId.ToString()).SendAsync("ReceiveMessage", dto); + MessageBaseDto msgInfo = null; + if(dto.ChatType.ToLower() == ChatType.PRIVATE.ToString().ToLower()) + { + msgInfo = await _messageService.SendPrivateMessageAsync(int.Parse(userIdStr), dto.ReceiverId, dto); + } + else + { + msgInfo = await _messageService.SendGroupMessageAsync(int.Parse(userIdStr), dto.ReceiverId, dto); + } + + await Clients.Users(dto.ReceiverId.ToString()).SendAsync("ReceiveMessage", msgInfo); return; } } diff --git a/backend/IM_API/Interface/Services/IMessageSevice.cs b/backend/IM_API/Interface/Services/IMessageSevice.cs index c49a949..a7fd68f 100644 --- a/backend/IM_API/Interface/Services/IMessageSevice.cs +++ b/backend/IM_API/Interface/Services/IMessageSevice.cs @@ -11,7 +11,7 @@ namespace IM_API.Interface.Services /// 接收人 /// /// - Task SendPrivateMessageAsync(int senderId,int receiverId,MessageBaseDto dto); + Task SendPrivateMessageAsync(int senderId,int receiverId,MessageBaseDto dto); /// /// 发送群聊消息 /// @@ -19,7 +19,7 @@ namespace IM_API.Interface.Services /// 接收群id /// /// - Task SendGroupMessageAsync(int senderId,int groupId,MessageBaseDto dto); + Task SendGroupMessageAsync(int senderId,int groupId,MessageBaseDto dto); /// /// 获取消息列表 /// diff --git a/backend/IM_API/Services/MessageService.cs b/backend/IM_API/Services/MessageService.cs index 6f4c41f..d6e631b 100644 --- a/backend/IM_API/Services/MessageService.cs +++ b/backend/IM_API/Services/MessageService.cs @@ -79,7 +79,7 @@ namespace IM_API.Services throw new NotImplementedException(); } #region 发送群消息 - public async Task SendGroupMessageAsync(int senderId, int groupId, MessageBaseDto dto) + public async Task SendGroupMessageAsync(int senderId, int groupId, MessageBaseDto dto) { //判断群存在 var isExist = await _context.Groups.AnyAsync(x => x.Id == groupId); @@ -92,12 +92,12 @@ namespace IM_API.Services message.StreamKey = StreamKeyBuilder.Group(groupId); _context.Messages.Add(message); await _context.SaveChangesAsync(); - return true; + return _mapper.Map(message); } #endregion #region 发送私聊消息 - public async Task SendPrivateMessageAsync(int senderId, int receiverId, MessageBaseDto dto) + public async Task SendPrivateMessageAsync(int senderId, int receiverId, MessageBaseDto dto) { bool isExist = await _context.Friends.AnyAsync(x => x.FriendId == receiverId); if (!isExist) throw new BaseException(CodeDefine.FRIEND_RELATION_NOT_FOUND); @@ -107,7 +107,7 @@ namespace IM_API.Services message.StreamKey = StreamKeyBuilder.Private(dto.SenderId, dto.ReceiverId); _context.Messages.Add(message); await _context.SaveChangesAsync(); - return true; + return _mapper.Map(message); } #endregion } diff --git a/frontend/web/src/App.vue b/frontend/web/src/App.vue index 5668470..79bb67b 100644 --- a/frontend/web/src/App.vue +++ b/frontend/web/src/App.vue @@ -7,8 +7,19 @@ +import { onMounted } from 'vue'; +import { useAuthStore } from './stores/auth'; +//import { useSignalRStore } from './stores/signalr'; +onMounted(async () => { + const { useSignalRStore } = await import('./stores/signalr'); + const authStore = useAuthStore(); + const signalRStore = useSignalRStore(); + if(authStore.token){ + signalRStore.initSignalR(); + } +}) +