ChatHub.cs 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. using Microsoft.AspNetCore.SignalR;
  2. namespace Admin.NET.Core;
  3. /// <summary>
  4. /// 聊天集线器
  5. /// </summary>
  6. public class ChatHub : Hub<IChatClient>
  7. {
  8. private readonly ISysCacheService _cache;
  9. private readonly ISendMessageService _sendMessageService;
  10. public ChatHub(ISysCacheService cache,
  11. ISendMessageService sendMessageService)
  12. {
  13. _cache = cache;
  14. _sendMessageService = sendMessageService;
  15. }
  16. /// <summary>
  17. /// 连接
  18. /// </summary>
  19. /// <returns></returns>
  20. public override async Task OnConnectedAsync()
  21. {
  22. //var token = Context.GetHttpContext().Request.Query["access_token"];
  23. //var claims = JWTEncryption.ReadJwtToken(token)?.Claims;
  24. //var client = Parser.GetDefault().Parse(Context.GetHttpContext().Request.Headers["User-Agent"]);
  25. //var loginBrowser = client.UA.Family + client.UA.Major;
  26. //var loginOs = client.OS.Family + client.OS.Major;
  27. //var userId = claims.FirstOrDefault(e => e.Type == ClaimConst.CLAINM_USERID)?.Value;
  28. //var account = claims.FirstOrDefault(e => e.Type == ClaimConst.CLAINM_ACCOUNT)?.Value;
  29. //var name = claims.FirstOrDefault(e => e.Type == ClaimConst.CLAINM_NAME)?.Value;
  30. //var tenantId = claims.FirstOrDefault(e => e.Type == ClaimConst.TENANT_ID)?.Value;
  31. //var onlineUsers = await _cache.GetAsync<List<OnlineUser>>(CommonConst.CACHE_KEY_ONLINE_USER) ?? new List<OnlineUser>();
  32. //onlineUsers.Add(new OnlineUser
  33. //{
  34. // ConnectionId = Context.ConnectionId,
  35. // UserId = long.Parse(userId),
  36. // LastTime = DateTime.Now,
  37. // LastLoginIp = App.HttpContext.GetRequestIPv4(),
  38. // LastLoginBrowser = loginBrowser,
  39. // LastLoginOs = loginOs,
  40. // Account = account,
  41. // Name = name,
  42. // TenantId = Convert.ToInt64(tenantId),
  43. //});
  44. //await _cache.SetAsync(CommonConst.CACHE_KEY_ONLINE_USER, onlineUsers);
  45. }
  46. /// <summary>
  47. /// 断开
  48. /// </summary>
  49. /// <param name="exception"></param>
  50. /// <returns></returns>
  51. public override async Task OnDisconnectedAsync(Exception exception)
  52. {
  53. //if (!string.IsNullOrEmpty(Context.ConnectionId))
  54. //{
  55. // var onlineUsers = await _cache.GetAsync<List<OnlineUser>>(CommonConst.CACHE_KEY_ONLINE_USER);
  56. // if (onlineUsers == null) return;
  57. // onlineUsers.RemoveAll(u => u.ConnectionId == Context.ConnectionId);
  58. // await _cache.SetAsync(CommonConst.CACHE_KEY_ONLINE_USER, onlineUsers);
  59. //}
  60. }
  61. /// <summary>
  62. /// 前端调用发送方法(发送信息给某个人)
  63. /// </summary>
  64. /// <param name="_message"></param>
  65. /// <returns></returns>
  66. public async Task ClientsSendMessage(MessageInput _message)
  67. {
  68. await _sendMessageService.SendMessageToUser(_message.Title, _message.Message, _message.MessageType, _message.UserId);
  69. }
  70. /// <summary>
  71. /// 前端调用发送方法(发送信息给所有人)
  72. /// </summary>
  73. /// <param name="_message"></param>
  74. /// <returns></returns>
  75. public async Task ClientsSendMessagetoAll(MessageInput _message)
  76. {
  77. await _sendMessageService.SendMessageToAllUser(_message.Title, _message.Message, _message.MessageType);
  78. }
  79. /// <summary>
  80. /// 前端调用发送方法(发送消息给除了发送人的其他人)
  81. /// </summary>
  82. /// <param name="_message"></param>
  83. /// <returns></returns>
  84. public async Task ClientsSendMessagetoOther(MessageInput _message)
  85. {
  86. // _message.userId为发送人ID
  87. await _sendMessageService.SendMessageToOtherUser(_message.Title, _message.Message, _message.MessageType, _message.UserId);
  88. }
  89. /// <summary>
  90. /// 前端调用发送方法(发送消息给某些人)
  91. /// </summary>
  92. /// <param name="_message"></param>
  93. /// <returns></returns>
  94. public async Task ClientsSendMessagetoUsers(MessageInput _message)
  95. {
  96. await _sendMessageService.SendMessageToUsers(_message.Title, _message.Message, _message.MessageType, _message.UserIds);
  97. }
  98. }