MyHub.cs 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. using Microsoft.AspNetCore.SignalR;
  2. namespace OASystem.API.OAMethodLib.Hubs
  3. {
  4. /// <summary>
  5. /// 定义集线器
  6. /// </summary>
  7. public class MyHub : Hub
  8. {
  9. /// <summary>
  10. /// 用户字典
  11. /// </summary>
  12. private static Dictionary<string, string> dictUsers = new Dictionary<string, string>();
  13. /// <summary>
  14. /// 建立连接回调
  15. /// </summary>
  16. /// <returns></returns>
  17. public override Task OnConnectedAsync()
  18. {
  19. Console.WriteLine($"ID:{Context.ConnectionId} 已连接");
  20. return base.OnConnectedAsync();
  21. }
  22. /// <summary>
  23. /// 断开连接回调
  24. /// </summary>
  25. /// <param name="exception"></param>
  26. /// <returns></returns>
  27. public override Task OnDisconnectedAsync(Exception? exception)
  28. {
  29. Console.WriteLine($"ID:{Context.ConnectionId} 已断开");
  30. return base.OnDisconnectedAsync(exception);
  31. }
  32. /// <summary>
  33. /// 登录功能,将用户ID和ConntectionId关联起来
  34. /// </summary>
  35. /// <param name="userId"></param>
  36. public void Login(string userId)
  37. {
  38. if (!dictUsers.ContainsKey(userId))
  39. {
  40. dictUsers[userId] = Context.ConnectionId;
  41. }
  42. Console.WriteLine($"{userId}登录成功,ConnectionId={Context.ConnectionId}");
  43. //向所有用户发送当前在线的用户列表
  44. Clients.All.SendAsync("Users", dictUsers.Keys.ToList());
  45. }
  46. /// <summary>
  47. /// 退出功能,当客户端退出时调用
  48. /// </summary>
  49. /// <param name="userId"></param>
  50. public void Logout(string userId)
  51. {
  52. if (dictUsers.ContainsKey(userId))
  53. {
  54. dictUsers.Remove(userId);
  55. }
  56. Console.WriteLine($"{userId}退出成功,ConnectionId={Context.ConnectionId}");
  57. }
  58. }
  59. }