SysMessageService.cs 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. // 大名科技(天津)有限公司 版权所有
  2. //
  3. // 此源代码遵循位于源代码树根目录中的 LICENSE 文件的许可证
  4. //
  5. // 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动
  6. //
  7. // 任何基于本项目二次开发而产生的一切法律纠纷和责任,均与作者无关
  8. using Microsoft.AspNetCore.SignalR;
  9. namespace Admin.NET.Core.Service;
  10. /// <summary>
  11. /// 系统消息发送服务 💥
  12. /// </summary>
  13. [ApiDescriptionSettings(Order = 370)]
  14. public class SysMessageService : IDynamicApiController, ITransient
  15. {
  16. private readonly SysCacheService _sysCacheService;
  17. private readonly EmailOptions _emailOptions;
  18. private readonly IHubContext<OnlineUserHub, IOnlineUserHub> _chatHubContext;
  19. public SysMessageService(SysCacheService sysCacheService,
  20. IOptions<EmailOptions> emailOptions,
  21. IHubContext<OnlineUserHub, IOnlineUserHub> chatHubContext)
  22. {
  23. _sysCacheService = sysCacheService;
  24. _emailOptions = emailOptions.Value;
  25. _chatHubContext = chatHubContext;
  26. }
  27. /// <summary>
  28. /// 发送消息给所有人 🔖
  29. /// </summary>
  30. /// <param name="input"></param>
  31. /// <returns></returns>
  32. [DisplayName("发送消息给所有人")]
  33. public async Task SendAllUser(MessageInput input)
  34. {
  35. await _chatHubContext.Clients.All.ReceiveMessage(input);
  36. }
  37. /// <summary>
  38. /// 发送消息给除了发送人的其他人 🔖
  39. /// </summary>
  40. /// <param name="input"></param>
  41. /// <returns></returns>
  42. [DisplayName("发送消息给除了发送人的其他人")]
  43. public async Task SendOtherUser(MessageInput input)
  44. {
  45. var user = _sysCacheService.Get<SysOnlineUser>(CacheConst.KeyUserOnline + input.UserId);
  46. if (user != null)
  47. {
  48. await _chatHubContext.Clients.AllExcept(user.ConnectionId).ReceiveMessage(input);
  49. }
  50. }
  51. /// <summary>
  52. /// 发送消息给某个人 🔖
  53. /// </summary>
  54. /// <param name="input"></param>
  55. /// <returns></returns>
  56. [DisplayName("发送消息给某个人")]
  57. public async Task SendUser(MessageInput input)
  58. {
  59. var user = _sysCacheService.Get<SysOnlineUser>(CacheConst.KeyUserOnline + input.UserId);
  60. if (user == null) return;
  61. await _chatHubContext.Clients.Client(user.ConnectionId).ReceiveMessage(input);
  62. // 可以直接通过用户Id发消息
  63. //await _chatHubContext.Clients.User(user.UserId.ToString()).ReceiveMessage(input);
  64. }
  65. /// <summary>
  66. /// 发送消息给某些人 🔖
  67. /// </summary>
  68. /// <param name="input"></param>
  69. /// <returns></returns>
  70. [DisplayName("发送消息给某些人")]
  71. public async Task SendUsers(MessageInput input)
  72. {
  73. var userlist = new List<string>();
  74. foreach (var userid in input.UserIds)
  75. {
  76. var user = _sysCacheService.Get<SysOnlineUser>(CacheConst.KeyUserOnline + userid);
  77. if (user != null) userlist.Add(user.ConnectionId);
  78. }
  79. await _chatHubContext.Clients.Clients(userlist).ReceiveMessage(input);
  80. }
  81. }