// Admin.NET 项目的版æƒã€å•†æ ‡ã€ä¸“利和其他相关æƒåˆ©å‡å—ç›¸åº”æ³•å¾‹æ³•è§„çš„ä¿æŠ¤ã€‚ä½¿ç”¨æœ¬é¡¹ç›®åº”éµå®ˆç›¸å…³æ³•律法规和许å¯è¯çš„è¦æ±‚。
//
// 本项目主è¦éµå¾ª MIT 许å¯è¯å’Œ Apache 许å¯è¯ï¼ˆç‰ˆæœ¬ 2.0)进行分å‘和使用。许å¯è¯ä½äºŽæºä»£ç æ ‘æ ¹ç›®å½•ä¸çš„ LICENSE-MIT å’Œ LICENSE-APACHE 文件。
//
// ä¸å¾—利用本项目从事å±å®³å›½å®¶å®‰å…¨ã€æ‰°ä¹±ç¤¾ä¼šç§©åºã€ä¾µçŠ¯ä»–äººåˆæ³•æƒç›Šç‰æ³•å¾‹æ³•è§„ç¦æ¢çš„æ´»åЍï¼ä»»ä½•基于本项目二次开å‘è€Œäº§ç”Ÿçš„ä¸€åˆ‡æ³•å¾‹çº çº·å’Œè´£ä»»ï¼Œæˆ‘ä»¬ä¸æ‰¿æ‹…任何责任ï¼
using Microsoft.AspNetCore.SignalR;
namespace Admin.NET.Core.Service;
/// <summary>
/// 系统消æ¯å‘逿œåŠ¡ 🧩
/// </summary>
[ApiDescriptionSettings(Order = 370)]
public class SysMessageService : IDynamicApiController, ITransient
{
private readonly SysCacheService _sysCacheService;
private readonly IHubContext<OnlineUserHub, IOnlineUserHub> _chatHubContext;
private readonly SysConfigService _sysConfigService;
public SysMessageService(SysCacheService sysCacheService,
IHubContext<OnlineUserHub, IOnlineUserHub> chatHubContext,
SysConfigService sysConfigService)
{
_sysCacheService = sysCacheService;
_chatHubContext = chatHubContext;
_sysConfigService = sysConfigService;
}
/// <summary>
/// å‘逿¶ˆæ¯ç»™æ‰€æœ‰äºº 🔖
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[DisplayName("å‘逿¶ˆæ¯ç»™æ‰€æœ‰äºº")]
public async Task SendAllUser(MessageInput input)
{
await _chatHubContext.Clients.All.ReceiveMessage(input);
}
/// <summary>
/// å‘逿¶ˆæ¯ç»™é™¤äº†å‘é€äººçš„其他人 🔖
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[DisplayName("å‘逿¶ˆæ¯ç»™é™¤äº†å‘é€äººçš„其他人")]
public async Task SendOtherUser(MessageInput input)
{
var cacheKey = CacheConst.KeyUserOnline + input.UserId;
// 是å¦å¼€å¯å•用户登录
if (await _sysConfigService.GetConfigValue<bool>(ConfigConst.SysSingleLogin))
{
var user = _sysCacheService.Get<SysOnlineUser>(cacheKey);
if (user == null) return;
await _chatHubContext.Clients.AllExcept(user.ConnectionId).ReceiveMessage(input);
}
else
{
var _cacheKeys = _sysCacheService.GetKeyList().Where(u => u.StartsWith(cacheKey)).ToArray();
foreach (var _cacheKey in _cacheKeys)
{
var user = _sysCacheService.Get<SysOnlineUser>(_cacheKey);
if (user == null) return;
await _chatHubContext.Clients.AllExcept(user.ConnectionId).ReceiveMessage(input);
}
}
}
/// <summary>
/// å‘逿¶ˆæ¯ç»™æŸä¸ªäºº 🔖
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[DisplayName("å‘逿¶ˆæ¯ç»™æŸä¸ªäºº")]
public async Task SendUser(MessageInput input)
{
var cacheKey = CacheConst.KeyUserOnline + input.UserId;
// 是å¦å¼€å¯å•用户登录
if (await _sysConfigService.GetConfigValue<bool>(ConfigConst.SysSingleLogin))
{
var user = _sysCacheService.Get<SysOnlineUser>(cacheKey);
if (user == null) return;
await _chatHubContext.Clients.Client(user.ConnectionId).ReceiveMessage(input);
}
else
{
var _cacheKeys = _sysCacheService.GetKeyList().Where(u => u.StartsWith(cacheKey)).ToArray();
foreach (var _cacheKey in _cacheKeys)
{
var user = _sysCacheService.Get<SysOnlineUser>(_cacheKey);
if (user == null) return;
await _chatHubContext.Clients.Client(user.ConnectionId).ReceiveMessage(input);
}
}
}
/// <summary>
/// å‘逿¶ˆæ¯ç»™æŸäº›äºº 🔖
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[DisplayName("å‘逿¶ˆæ¯ç»™æŸäº›äºº")]
public async Task SendUsers(MessageInput input)
{
var userList = new List<string>();
foreach (var userId in input.UserIds)
{
var cacheKey = CacheConst.KeyUserOnline + userId;
// 是å¦å¼€å¯å•用户登录
if (await _sysConfigService.GetConfigValue<bool>(ConfigConst.SysSingleLogin))
{
var user = _sysCacheService.Get<SysOnlineUser>(cacheKey);
if (user != null) userList.Add(user.ConnectionId);
}
else
{
var _cacheKeys = _sysCacheService.GetKeyList().Where(u => u.StartsWith(cacheKey)).ToArray();
foreach (var _cacheKey in _cacheKeys)
{
var user = _sysCacheService.Get<SysOnlineUser>(_cacheKey);
if (user != null) userList.Add(user.ConnectionId);
}
}
}
await _chatHubContext.Clients.Clients(userList).ReceiveMessage(input);
}
}