SendMessageService.cs 3.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. using Microsoft.AspNetCore.SignalR;
  2. namespace Admin.NET.Core.Service;
  3. /// <summary>
  4. /// 消息发送服务
  5. /// </summary>
  6. [ApiDescriptionSettings(Name = "消息发送", Order = 101)]
  7. public class SendMessageService : ISendMessageService, IDynamicApiController, ITransient
  8. {
  9. private readonly ISysCacheService _sysCacheService;
  10. private readonly IHubContext<ChatHub, IChatClient> _chatHubContext;
  11. public SendMessageService(ISysCacheService sysCacheService,
  12. IHubContext<ChatHub, IChatClient> chatHubContext)
  13. {
  14. _sysCacheService = sysCacheService;
  15. _chatHubContext = chatHubContext;
  16. }
  17. /// <summary>
  18. /// 发送消息给所有人
  19. /// </summary>
  20. /// <param name="title">发送标题</param>
  21. /// <param name="message">发送内容</param>
  22. /// <param name="type">消息类型</param>
  23. /// <returns></returns>
  24. [HttpGet("sysMessage/allUser")]
  25. public async Task SendMessageToAllUser(string title, string message, MessageTypeEnum type)
  26. {
  27. await _chatHubContext.Clients.All.ReceiveMessage(new { Title = title, Message = message, Messagetype = type });
  28. }
  29. /// <summary>
  30. /// 发送消息给除了发送人的其他人
  31. /// </summary>
  32. /// <param name="title">发送标题</param>
  33. /// <param name="message">发送内容</param>
  34. /// <param name="userId">发送人</param>
  35. /// <param name="type">消息类型</param>
  36. /// <returns></returns>
  37. [HttpGet("sysMessage/otherUser")]
  38. public async Task SendMessageToOtherUser(string title, string message, MessageTypeEnum type, long userId)
  39. {
  40. var onlineuserlist = await _sysCacheService.GetAsync<List<SysOnlineUser>>(CacheConst.KeyOnlineUser);
  41. var user = onlineuserlist.Where(x => x.UserId == userId).ToList();
  42. if (user != null)
  43. {
  44. await _chatHubContext.Clients.AllExcept(user[0].ConnectionId).ReceiveMessage(new { Title = title, Message = message, Messagetype = type });
  45. }
  46. }
  47. /// <summary>
  48. /// 发送消息给某个人
  49. /// </summary>
  50. /// <param name="title">发送标题</param>
  51. /// <param name="message">发送内容</param>
  52. /// <param name="userId">接收人</param>
  53. /// <param name="type">消息类型</param>
  54. /// <returns></returns>
  55. [HttpGet("sysMessage/user")]
  56. public async Task SendMessageToUser(string title, string message, MessageTypeEnum type, long userId)
  57. {
  58. var onlineuserlist = await _sysCacheService.GetAsync<List<SysOnlineUser>>(CacheConst.KeyOnlineUser);
  59. var user = onlineuserlist.Where(x => x.UserId == userId).ToList();
  60. if (user != null)
  61. {
  62. foreach (var item in user)
  63. {
  64. await _chatHubContext.Clients.Client(item.ConnectionId).ReceiveMessage(new { Title = title, Message = message, Messagetype = type });
  65. }
  66. }
  67. }
  68. /// <summary>
  69. /// 发送消息给某些人
  70. /// </summary>
  71. /// <param name="title">发送标题</param>
  72. /// <param name="message">发送内容</param>
  73. /// <param name="userId">接收人列表</param>
  74. /// <param name="type">消息类型</param>
  75. /// <returns></returns>
  76. [HttpGet("sysMessage/users")]
  77. public async Task SendMessageToUsers(string title, string message, MessageTypeEnum type, List<long> userId)
  78. {
  79. var onlineuserlist = await _sysCacheService.GetAsync<List<SysOnlineUser>>(CacheConst.KeyOnlineUser);
  80. var userlist = new List<string>();
  81. foreach (var item in onlineuserlist)
  82. {
  83. if (userId.Contains(item.UserId))
  84. userlist.Add(item.ConnectionId);
  85. }
  86. await _chatHubContext.Clients.Clients(userlist).ReceiveMessage(new { Title = title, Message = message, Messagetype = type });
  87. }
  88. }