ClientsMainHub.cs 1.7 KB

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