From 945f64e46a5d9792ad38629ffb91d67689facdbf Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com>
Date: Wed, 27 Sep 2023 18:28:03 +0800
Subject: [PATCH] =?UTF-8?q?:zap:=E4=BC=98=E5=8C=96signalr=E6=B6=88?=
=?UTF-8?q?=E6=81=AF=E5=8F=91=E9=80=81=E6=8E=A5=E6=94=B6?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
ZR.Admin.WebApi/Program.cs | 1 -
ZR.ServiceCore/Model/Dto/ChatMessageDto.cs | 31 +++++++++++++++
ZR.ServiceCore/Signalr/MessageHub.cs | 46 +++++++++++++---------
ZR.ServiceCore/SqlSugar/SqlsugarSetup.cs | 2 +-
4 files changed, 59 insertions(+), 21 deletions(-)
create mode 100644 ZR.ServiceCore/Model/Dto/ChatMessageDto.cs
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;