SysMessageService.cs 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. // 此源代码遵循位于源代码树根目录中的 LICENSE 文件的许可证。
  2. //
  3. // 必须在法律法规允许的范围内正确使用,严禁将其用于非法、欺诈、恶意或侵犯他人合法权益的目的。
  4. using Microsoft.AspNetCore.SignalR;
  5. namespace Admin.NET.Core.Service;
  6. /// <summary>
  7. /// 系统消息发送服务 💥
  8. /// </summary>
  9. [ApiDescriptionSettings(Order = 370)]
  10. public class SysMessageService : IDynamicApiController, ITransient
  11. {
  12. private readonly SysCacheService _sysCacheService;
  13. private readonly EmailOptions _emailOptions;
  14. private readonly IHubContext<OnlineUserHub, IOnlineUserHub> _chatHubContext;
  15. public SysMessageService(SysCacheService sysCacheService,
  16. IOptions<EmailOptions> emailOptions,
  17. IHubContext<OnlineUserHub, IOnlineUserHub> chatHubContext)
  18. {
  19. _sysCacheService = sysCacheService;
  20. _emailOptions = emailOptions.Value;
  21. _chatHubContext = chatHubContext;
  22. }
  23. /// <summary>
  24. /// 发送消息给所有人 🔖
  25. /// </summary>
  26. /// <param name="input"></param>
  27. /// <returns></returns>
  28. [DisplayName("发送消息给所有人")]
  29. public async Task SendAllUser(MessageInput input)
  30. {
  31. await _chatHubContext.Clients.All.ReceiveMessage(input);
  32. }
  33. /// <summary>
  34. /// 发送消息给除了发送人的其他人 🔖
  35. /// </summary>
  36. /// <param name="input"></param>
  37. /// <returns></returns>
  38. [DisplayName("发送消息给除了发送人的其他人")]
  39. public async Task SendOtherUser(MessageInput input)
  40. {
  41. var user = _sysCacheService.Get<SysOnlineUser>(CacheConst.KeyUserOnline + input.UserId);
  42. if (user != null)
  43. {
  44. await _chatHubContext.Clients.AllExcept(user.ConnectionId).ReceiveMessage(input);
  45. }
  46. }
  47. /// <summary>
  48. /// 发送消息给某个人 🔖
  49. /// </summary>
  50. /// <param name="input"></param>
  51. /// <returns></returns>
  52. [DisplayName("发送消息给某个人")]
  53. public async Task SendUser(MessageInput input)
  54. {
  55. var user = _sysCacheService.Get<SysOnlineUser>(CacheConst.KeyUserOnline + input.UserId);
  56. if (user == null) return;
  57. await _chatHubContext.Clients.Client(user.ConnectionId).ReceiveMessage(input);
  58. // 可以直接通过用户Id发消息
  59. //await _chatHubContext.Clients.User(user.UserId.ToString()).ReceiveMessage(input);
  60. }
  61. /// <summary>
  62. /// 发送消息给某些人 🔖
  63. /// </summary>
  64. /// <param name="input"></param>
  65. /// <returns></returns>
  66. [DisplayName("发送消息给某些人")]
  67. public async Task SendUsers(MessageInput input)
  68. {
  69. var userlist = new List<string>();
  70. foreach (var userid in input.UserIds)
  71. {
  72. var user = _sysCacheService.Get<SysOnlineUser>(CacheConst.KeyUserOnline + userid);
  73. if (user != null) userlist.Add(user.ConnectionId);
  74. }
  75. await _chatHubContext.Clients.Clients(userlist).ReceiveMessage(input);
  76. }
  77. }