ClientsMainHub.cs 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. using Microsoft.AspNetCore.Http.Features;
  2. namespace EEMSServerCore.Hubs;
  3. internal partial class ClientsMainHub(DeviceManager deviceManager, IEEMSBaseServerProvider provider, IUIProvider uiCaller) : 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.ClientHub);
  9. if (deviceManager.TryGetDevice(Context.ConnectionId, out DeviceInfo? device) && device is not null && device.Guid is not null)
  10. {
  11. device.IsConnected = true;
  12. uiCaller.UpdateDevice(device);
  13. }
  14. return base.OnConnectedAsync();
  15. }
  16. public override Task OnDisconnectedAsync(Exception? exception)
  17. {
  18. deviceManager.RemoveDevice(Context.ConnectionId, out DeviceInfo? device);
  19. if (device is not null && device.Guid.HasValue)
  20. {
  21. ClientManager.DeviceClients.TryRemove(device.Guid.Value, out _);
  22. device.IsConnected = false;
  23. uiCaller.UpdateDevice(device);
  24. //uiCaller.OnlineStatusNotify(device.Guid.Value, false);
  25. }
  26. if (Context.Features.Get<IHttpConnectionFeature>() is IHttpConnectionFeature feature)
  27. provider?.OnDisConnected(feature.RemoteIpAddress!.ToString(), (ushort)feature.RemotePort, ServiceHub.ClientHub);
  28. return base.OnDisconnectedAsync(exception);
  29. }
  30. public Task<Guid> RegisterDevice(DeviceInfo deviceInfo)
  31. {
  32. deviceInfo.IP ??= string.Empty;
  33. deviceInfo.Guid ??= Guid.NewGuid();
  34. if (!deviceManager.LoginDevice(Context.ConnectionId, deviceInfo, Clients.Caller, out bool newDevice))
  35. return Task.FromResult(Guid.Empty);
  36. if (newDevice)
  37. uiCaller.InsertNewDevice(deviceInfo);
  38. else
  39. uiCaller.UpdateDevice(deviceInfo);
  40. return Task.FromResult(deviceInfo.Guid.Value);
  41. }
  42. public Task<bool> UpdateRealTimeData(Dictionary<string, object> realtimeData)
  43. {
  44. if (!deviceManager.TryGetDevice(Context.ConnectionId, out DeviceInfo? device) || device is null || device.Guid is null)
  45. return Task.FromResult(false);
  46. return uiCaller.UpdateRealtimeData(device.Guid.Value, realtimeData);
  47. }
  48. public Task<bool> UpdateAlarm(IEnumerable<Alarm> alarms)
  49. {
  50. if (!deviceManager.TryGetDevice(Context.ConnectionId, out DeviceInfo? device) || device is null || device.Guid is null)
  51. return Task.FromResult(false);
  52. return uiCaller.UpdateAlarm(alarms);
  53. }
  54. public Task<bool> UpdateRecipeInfo(Recipe recipeInfo)
  55. {
  56. if (!deviceManager.TryGetDevice(Context.ConnectionId, out DeviceInfo? device) || device is null || device.Guid is null)
  57. return Task.FromResult(false);
  58. return uiCaller.UpdateRecipeInfo(recipeInfo);
  59. }
  60. }