SysMessageService.cs 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  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 IHubContext<OnlineUserHub, IOnlineUserHub> _chatHubContext;
  18. public SysMessageService(SysCacheService sysCacheService,
  19. IHubContext<OnlineUserHub, IOnlineUserHub> chatHubContext)
  20. {
  21. _sysCacheService = sysCacheService;
  22. _chatHubContext = chatHubContext;
  23. }
  24. /// <summary>
  25. /// 发送消息给所有人 🔖
  26. /// </summary>
  27. /// <param name="input"></param>
  28. /// <returns></returns>
  29. [DisplayName("发送消息给所有人")]
  30. public async Task SendAllUser(MessageInput input)
  31. {
  32. await _chatHubContext.Clients.All.ReceiveMessage(input);
  33. }
  34. /// <summary>
  35. /// 发送消息给除了发送人的其他人 🔖
  36. /// </summary>
  37. /// <param name="input"></param>
  38. /// <returns></returns>
  39. [DisplayName("发送消息给除了发送人的其他人")]
  40. public async Task SendOtherUser(MessageInput input)
  41. {
  42. var user = _sysCacheService.Get<SysOnlineUser>(CacheConst.KeyUserOnline + input.UserId);
  43. if (user != null)
  44. {
  45. await _chatHubContext.Clients.AllExcept(user.ConnectionId).ReceiveMessage(input);
  46. }
  47. }
  48. /// <summary>
  49. /// 发送消息给某个人 🔖
  50. /// </summary>
  51. /// <param name="input"></param>
  52. /// <returns></returns>
  53. [DisplayName("发送消息给某个人")]
  54. public async Task SendUser(MessageInput input)
  55. {
  56. var user = _sysCacheService.Get<SysOnlineUser>(CacheConst.KeyUserOnline + input.UserId);
  57. if (user == null) return;
  58. await _chatHubContext.Clients.Client(user.ConnectionId).ReceiveMessage(input);
  59. // 可以直接通过用户Id发消息
  60. //await _chatHubContext.Clients.User(user.UserId.ToString()).ReceiveMessage(input);
  61. }
  62. /// <summary>
  63. /// 发送消息给某些人 🔖
  64. /// </summary>
  65. /// <param name="input"></param>
  66. /// <returns></returns>
  67. [DisplayName("发送消息给某些人")]
  68. public async Task SendUsers(MessageInput input)
  69. {
  70. var userlist = new List<string>();
  71. foreach (var userid in input.UserIds)
  72. {
  73. var user = _sysCacheService.Get<SysOnlineUser>(CacheConst.KeyUserOnline + userid);
  74. if (user != null) userlist.Add(user.ConnectionId);
  75. }
  76. await _chatHubContext.Clients.Clients(userlist).ReceiveMessage(input);
  77. }
  78. }