ClientsHub.cs 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. using Microsoft.AspNetCore.Http;
  2. using Microsoft.AspNetCore.Http.Features;
  3. using System.Net;
  4. namespace EEMSService.Hubs;
  5. internal partial class ClientsHub(DeviceManager deviceManager, ClientManager clientManager, IEEMSBaseServerProvider provider) : HubBase
  6. {
  7. public override Task OnConnectedAsync()
  8. {
  9. if (Context.Features.Get<IHttpConnectionFeature>() is IHttpConnectionFeature feature)
  10. {
  11. provider?.OnConnected(feature.RemoteIpAddress!.ToString(), (ushort)feature.RemotePort, ServiceHub.ClinetHub);
  12. }
  13. return base.OnConnectedAsync();
  14. }
  15. public override Task OnDisconnectedAsync(Exception? exception)
  16. {
  17. deviceManager.RemoveDevice(Context.ConnectionId, out DeviceInfo? device);
  18. if (device is not null && device.Guid.HasValue)
  19. clientManager.DeviceClients.TryRemove(device.Guid.Value, out _);
  20. if (Context.Features.Get<IHttpConnectionFeature>() is IHttpConnectionFeature feature)
  21. {
  22. provider?.OnDisConnected(feature.RemoteIpAddress!.ToString(), (ushort)feature.RemotePort, ServiceHub.ClinetHub);
  23. }
  24. return base.OnDisconnectedAsync(exception);
  25. }
  26. public Task<Guid> RegisterDevice(DeviceInfo deviceInfo)
  27. {
  28. deviceInfo.Guid ??= Guid.NewGuid();
  29. deviceManager.LoginDevice(Context.ConnectionId, deviceInfo);
  30. clientManager.DeviceClients[deviceInfo.Guid.Value] = Clients.Caller;
  31. //Task.Factory.StartNew(() =>
  32. //{
  33. // Thread.Sleep(2000);
  34. // clientManager.DeviceClients[deviceInfo.Guid.Value].SendAsync("RequestFile", Guid.NewGuid(), 1);
  35. //});
  36. return Task.FromResult(deviceInfo.Guid.Value);
  37. }
  38. }