DeviceManager.cs 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. namespace EEMSServerCore.Managers;
  2. internal class DeviceManager(SqlSugarCustom orm)
  3. {
  4. private readonly ConcurrentDictionary<string, DeviceInfo> DevicesFromConnectionID = [];
  5. private readonly ConcurrentDictionary<Guid, DeviceInfo> DevicesFromGuid = [];
  6. private readonly ConcurrentDictionary<Guid, string> deviceConnectionID = [];
  7. public bool Initialize()
  8. {
  9. if (!orm.Query("Devices", out List<DeviceInfo>? devices) || devices is null)
  10. return false;
  11. foreach (var item in devices)
  12. {
  13. if (!item.Guid.HasValue)
  14. continue;
  15. this.LoginDevice(item, out _);
  16. }
  17. return true;
  18. }
  19. public bool LoginDevice(string connectionID, DeviceInfo deviceInfo, ISingleClientProxy singleClient, out bool isNewDevice)
  20. {
  21. isNewDevice = false;
  22. if (!deviceInfo.Guid.HasValue)
  23. return false;
  24. if (!orm.InsertOrUpdate(EEMSCenterConfig.DeviceTableName, deviceInfo, t => Guid.Equals(t.Guid, deviceInfo.Guid), out isNewDevice))
  25. return false;
  26. DevicesFromGuid[deviceInfo.Guid.Value] = deviceInfo;
  27. DevicesFromConnectionID[connectionID] = deviceInfo;
  28. ClientManager.DeviceClients[deviceInfo.Guid.Value] = singleClient;
  29. return true;
  30. }
  31. public bool LoginDevice(DeviceInfo deviceInfo, out bool isNewDevice)
  32. {
  33. isNewDevice = false;
  34. if (!deviceInfo.Guid.HasValue)
  35. return false;
  36. DevicesFromGuid[deviceInfo.Guid.Value] = deviceInfo;
  37. return orm.InsertOrUpdate(EEMSCenterConfig.DeviceTableName, deviceInfo, t => t.Guid == deviceInfo.Guid, out isNewDevice);
  38. }
  39. public bool RemoveDevice(string connectionID, out DeviceInfo? device)
  40. {
  41. DevicesFromConnectionID.TryRemove(connectionID, out device);
  42. if (device is null || !device.Guid.HasValue)
  43. return false;
  44. Guid guid = device.Guid.Value;
  45. DevicesFromGuid.TryRemove(guid, out device);
  46. return orm.Delete<DeviceInfo>("Devices", t => t.Guid == guid);
  47. }
  48. public bool RemoveDevice(Guid guid, out DeviceInfo? device)
  49. {
  50. if (!DevicesFromGuid.TryRemove(guid, out device) || device is null)
  51. return false;
  52. if (!deviceConnectionID.TryRemove(guid, out string? connectionID) || string.IsNullOrEmpty(connectionID))
  53. return false;
  54. DevicesFromConnectionID.TryRemove(connectionID, out _);
  55. return orm.Delete<DeviceInfo>("Devices", t => t.Guid == guid);
  56. }
  57. public bool TryGetDevice(string connectionID, out DeviceInfo? device)
  58. {
  59. device = default;
  60. if (string.IsNullOrEmpty(connectionID))
  61. return false;
  62. return DevicesFromConnectionID.TryGetValue(connectionID, out device);
  63. }
  64. public bool TryGetDevice(Guid guid, out DeviceInfo? device)
  65. {
  66. return DevicesFromGuid.TryGetValue(guid, out device);
  67. }
  68. public bool GetDeviceList(out Dictionary<Guid, DeviceInfo>? devices)
  69. {
  70. devices = this.DevicesFromGuid.ToDictionary();
  71. return true;
  72. }
  73. }