diff --git a/ZR.Admin.WebApi/Program.cs b/ZR.Admin.WebApi/Program.cs index abb03a4..dabf9d1 100644 --- a/ZR.Admin.WebApi/Program.cs +++ b/ZR.Admin.WebApi/Program.cs @@ -3,7 +3,6 @@ using Infrastructure.Converter; using Microsoft.AspNetCore.DataProtection; using NLog.Web; using System.Text.Json; -using System.Text.Json.Serialization; using ZR.Admin.WebApi.Extensions; using ZR.Common.Cache; using ZR.Infrastructure.WebExtensions; diff --git a/ZR.ServiceCore/Model/Dto/ChatMessageDto.cs b/ZR.ServiceCore/Model/Dto/ChatMessageDto.cs new file mode 100644 index 0000000..2614b55 --- /dev/null +++ b/ZR.ServiceCore/Model/Dto/ChatMessageDto.cs @@ -0,0 +1,31 @@ +namespace ZR.ServiceCore.Model.Dto +{ + public class ChatMessageDto + { + public ChatUserDto FromUser { get; set; } + public bool Self { get; set; } + [SugarColumn(IsPrimaryKey = true)] + public string ChatId { get; set; } + /// + /// 0、文本 1、图片 2、文件 3、语音 4、视频 + /// + public int MsgType { get; set; } + public string StoredKey { get; set; } + public long UserId { get; set; } + public long ToUserId { get; set; } + + /// + /// 消息内容,如果type=1/2/3/4,此属性表示文件的URL地址 + /// + public string Message { get; set; } + public long ChatTime { get; set; } + public int Online { get; set; } + } + + public class ChatUserDto + { + public string UserName { get; set; } + public string NickName { get; set; } + public string Avatar { get; set; } + } +} diff --git a/ZR.ServiceCore/Signalr/MessageHub.cs b/ZR.ServiceCore/Signalr/MessageHub.cs index 88303ce..2fa1258 100644 --- a/ZR.ServiceCore/Signalr/MessageHub.cs +++ b/ZR.ServiceCore/Signalr/MessageHub.cs @@ -1,10 +1,12 @@ using Infrastructure; using Infrastructure.Model; using IPTools.Core; +using Mapster; using Microsoft.AspNetCore.SignalR; using System.Web; using UAParser; using ZR.Service.System.IService; +using ZR.ServiceCore.Model.Dto; namespace ZR.ServiceCore.Signalr { @@ -18,10 +20,12 @@ namespace ZR.ServiceCore.Signalr public static List users = new(); //private readonly NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger(); private readonly ISysNoticeService SysNoticeService; + private readonly ISysUserService UserService; - public MessageHub(ISysNoticeService noticeService) + public MessageHub(ISysNoticeService noticeService, ISysUserService userService) { SysNoticeService = noticeService; + UserService = userService; } private ApiResult SendNotice() @@ -137,12 +141,11 @@ namespace ZR.ServiceCore.Signalr /// /// 发送信息 /// - /// 对方链接id /// /// /// [HubMethodName("sendMessage")] - public async Task SendMessage(string toConnectId, long toUserId, string message) + public async Task SendMessage(long toUserId, string message) { var userName = HttpContextExtension.GetName(App.HttpContext); long userid = HttpContextExtension.GetUId(App.HttpContext); @@ -150,28 +153,33 @@ namespace ZR.ServiceCore.Signalr var toUserInfo = toUserList.FirstOrDefault(); IList sendToUser = toUserList.Select(x => x.ConnnectionId).ToList(); sendToUser.Add(GetConnectId()); - if (toUserInfo != null) + var fromUser = await UserService.GetByIdAsync(userid); + + ChatMessageDto messageDto = new() { - await Clients.Clients(sendToUser) - .SendAsync("receiveChat", new - { - msgType = 0,//文本 - chatid = Guid.NewGuid().ToString(), - userName, - userid, - toUserName = toUserInfo.Name, - toUserid = toUserInfo.Userid, - message, - chatTime = DateTime.Now - }); - } - else + MsgType = 0, + StoredKey = $"{userid}-{toUserId}", + UserId = userid, + ChatId = Guid.NewGuid().ToString(), + ToUserId = toUserId, + Message = message, + Online = 1, + ChatTime = DateTimeHelper.GetUnixTimeSeconds(DateTime.Now), + FromUser = fromUser.Adapt(), + }; + if (toUserInfo == null) { + messageDto.Online = 0; //TODO 存储离线消息 Console.WriteLine($"{toUserId}不在线"); } + else + { + await Clients.Clients(sendToUser) + .SendAsync("receiveChat", messageDto); + } - Console.WriteLine($"用户{userName}对{toConnectId}-{toUserId}说:{message}"); + Console.WriteLine($"用户{userName}对{toUserId}说:{message}"); } private OnlineUsers GetUserByConnId(string connId) diff --git a/ZR.ServiceCore/SqlSugar/SqlsugarSetup.cs b/ZR.ServiceCore/SqlSugar/SqlsugarSetup.cs index d7be7ce..6582814 100644 --- a/ZR.ServiceCore/SqlSugar/SqlsugarSetup.cs +++ b/ZR.ServiceCore/SqlSugar/SqlsugarSetup.cs @@ -17,7 +17,7 @@ namespace ZR.ServiceCore.SqlSugar /// /// /// - public static void AddDb(this IServiceCollection services,IWebHostEnvironment environment) + public static void AddDb(this IServiceCollection services, IWebHostEnvironment environment) { var options = App.OptionsSetting; List dbConfigs = options.DbConfigs;