MessageHub.cs 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. using Microsoft.AspNetCore.Cors;
  2. using Microsoft.AspNetCore.SignalR;
  3. using System.ComponentModel.DataAnnotations;
  4. namespace OASystem.API.OAMethodLib.Hubs
  5. {
  6. /// <summary>
  7. /// 站内通信 Hub
  8. /// </summary>
  9. public class MessageHub : Hub
  10. {
  11. private readonly ILogger<MessageHub> _logger;
  12. public static List<HubUser> _userList = new List<HubUser> { };
  13. public MessageHub(ILogger<MessageHub> logger)
  14. {
  15. _logger = logger;
  16. }
  17. //发送消息--发送给所有连接的客户端
  18. public Task SendMessage(string msg)
  19. {
  20. return Clients.All.SendAsync("ReceiveMessage", msg);
  21. }
  22. //发送消息--发送给指定用户
  23. public Task SendPrivateMessage(string connectionId, string message)
  24. {
  25. return Clients.Client(connectionId).SendAsync("ReceiveMessage", message);
  26. }
  27. /// <summary>
  28. /// 登录功能,将用户ID和ConntectionId关联起来
  29. /// </summary>
  30. /// <param name="userId"></param>
  31. public void Login(int userId,string userName)
  32. {
  33. try
  34. {
  35. HubUser hu = _userList.Find(a => a.UserId == userId);
  36. if (hu != null)
  37. {
  38. _userList.Remove(hu);
  39. }
  40. string connectionId = Context.ConnectionId;
  41. _userList.Add(new HubUser
  42. {
  43. UserId = userId,
  44. UserName = userName,
  45. ConnectionId = connectionId
  46. });
  47. Console.WriteLine($"{userId}登录成功,ConnectionId={connectionId}");
  48. }
  49. catch (Exception ex)
  50. {
  51. Console.WriteLine($"{userId}登录失败");
  52. }
  53. }
  54. /// <summary>
  55. /// 退出功能,当客户端退出时调用
  56. /// </summary>
  57. /// <param name="userId"></param>
  58. public void Logout(int userId)
  59. {
  60. HubUser hu = _userList.Find(a => a.UserId == userId);
  61. if (hu != null)
  62. {
  63. _userList.Remove(hu);
  64. }
  65. Console.WriteLine($"{userId}退出成功,ConnectionId={hu.ConnectionId}");
  66. }
  67. public class HubUser
  68. {
  69. /// <summary>
  70. /// 连接ID
  71. /// </summary>
  72. [Key]
  73. public string ConnectionId { get; set; } = string.Empty;
  74. /// <summary>
  75. /// 用户id
  76. /// </summary>
  77. public int UserId { get; set; }
  78. /// <summary>
  79. /// 姓名
  80. /// </summary>
  81. public string UserName { get; set; }
  82. }
  83. }
  84. }