Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

ConnectionHub.cs 1.3KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. using Microsoft.AspNetCore.SignalR;
  2. using System.Diagnostics.CodeAnalysis;
  3. namespace Diligent.WebAPI.Host.Hubs
  4. {
  5. public class ConnectionHub : Hub
  6. {
  7. private static Dictionary<string, string> IDs { get; set; } = new();
  8. [ExcludeFromCodeCoverage]
  9. public override async Task OnDisconnectedAsync(Exception exception)
  10. {
  11. var msg = new StatusMessage { Id = IDs[Context.ConnectionId], M = "unsubscription" };
  12. IDs.Remove(Context.ConnectionId);
  13. await Clients.All.SendAsync("Notify", msg);
  14. }
  15. [ExcludeFromCodeCoverage]
  16. [HubMethodName("Subscribe")]
  17. public async Task Subscribe(string id)
  18. {
  19. if (!IDs.Any(n => n.Value == id))
  20. IDs[Context.ConnectionId] = id;
  21. string[] ids = new string[IDs.Count];
  22. IDs.Values.CopyTo(ids, 0);
  23. await Clients.Caller.SendAsync("ReceiveList", ids);
  24. var msg = new StatusMessage { Id = id, M = "subscription" };
  25. await Clients.Others.SendAsync("Notify", msg);
  26. }
  27. [HubMethodName("Unsubscribe")]
  28. public async Task Unsubscribe(SenderObj s)
  29. {
  30. IDs.Remove(s.ConnId);
  31. var msg = new StatusMessage { Id = s.Id, M = "unsubscription" };
  32. await Clients.Others.SendAsync("Notify", msg);
  33. }
  34. }
  35. }