ClientsMainHub.cs 1.4 KB

123456789101112131415161718192021222324252627282930313233343536
  1. using Microsoft.AspNetCore.Http.Features;
  2. namespace EEMSServerCore.Hubs;
  3. internal partial class ClientsMainHub(DeviceManager deviceManager, IEEMSBaseServerProvider provider) : Hub, IClientCaller
  4. {
  5. public override Task OnConnectedAsync()
  6. {
  7. if (Context.Features.Get<IHttpConnectionFeature>() is IHttpConnectionFeature feature)
  8. provider?.OnConnected(feature.RemoteIpAddress!.ToString(), (ushort)feature.RemotePort, ServiceHub.ClinetHub);
  9. return base.OnConnectedAsync();
  10. }
  11. public override Task OnDisconnectedAsync(Exception? exception)
  12. {
  13. deviceManager.RemoveDevice(Context.ConnectionId, out DeviceInfo? device);
  14. if (device is not null && device.Guid.HasValue)
  15. ClientManager.DeviceClients.TryRemove(device.Guid.Value, out _);
  16. if (Context.Features.Get<IHttpConnectionFeature>() is IHttpConnectionFeature feature)
  17. provider?.OnDisConnected(feature.RemoteIpAddress!.ToString(), (ushort)feature.RemotePort, ServiceHub.ClinetHub);
  18. return base.OnDisconnectedAsync(exception);
  19. }
  20. public Task<Guid> RegisterDevice(DeviceInfo deviceInfo)
  21. {
  22. deviceInfo.Guid ??= Guid.NewGuid();
  23. deviceManager.LoginDevice(Context.ConnectionId, deviceInfo);
  24. ClientManager.DeviceClients[deviceInfo.Guid.Value] = Clients.Caller;
  25. return Task.FromResult(deviceInfo.Guid.Value);
  26. }
  27. }