// 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); } }