DeviceManager.cs 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  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. DevicesFromGuid[deviceInfo.Guid.Value] = deviceInfo;
  25. DevicesFromConnectionID[connectionID] = deviceInfo;
  26. ClientManager.DeviceClients[deviceInfo.Guid.Value] = singleClient;
  27. return orm.InsertOrUpdate(EEMSCenterConfig.DeviceTableName, deviceInfo, t => t.Guid == deviceInfo.Guid, out isNewDevice);
  28. }
  29. public bool LoginDevice(DeviceInfo deviceInfo, out bool isNewDevice)
  30. {
  31. isNewDevice = false;
  32. if (!deviceInfo.Guid.HasValue)
  33. return false;
  34. DevicesFromGuid[deviceInfo.Guid.Value] = deviceInfo;
  35. return orm.InsertOrUpdate(EEMSCenterConfig.DeviceTableName, deviceInfo, t => t.Guid == deviceInfo.Guid, out isNewDevice);
  36. }
  37. public bool RemoveDevice(string connectionID, out DeviceInfo? device)
  38. {
  39. DevicesFromConnectionID.TryRemove(connectionID, out device);
  40. if (device is null || !device.Guid.HasValue)
  41. return false;
  42. Guid guid = device.Guid.Value;
  43. DevicesFromGuid.TryRemove(guid, out device);
  44. return orm.Delete<DeviceInfo>("Devices", t => t.Guid == guid);
  45. }
  46. public bool RemoveDevice(Guid guid, out DeviceInfo? device)
  47. {
  48. if (!DevicesFromGuid.TryRemove(guid, out device) || device is null)
  49. return false;
  50. if (!deviceConnectionID.TryRemove(guid, out string? connectionID) || string.IsNullOrEmpty(connectionID))
  51. return false;
  52. DevicesFromConnectionID.TryRemove(connectionID, out _);
  53. return orm.Delete<DeviceInfo>("Devices", t => t.Guid == guid);
  54. }
  55. public bool TryGetDevice(string connectionID, out DeviceInfo? device)
  56. {
  57. device = default;
  58. if (string.IsNullOrEmpty(connectionID))
  59. return false;
  60. return DevicesFromConnectionID.TryGetValue(connectionID, out device);
  61. }
  62. public bool TryGetDevice(Guid guid, out DeviceInfo? device)
  63. {
  64. return DevicesFromGuid.TryGetValue(guid, out device);
  65. }
  66. public bool GetDeviceList(out Dictionary<Guid, DeviceInfo>? devices)
  67. {
  68. devices = this.DevicesFromGuid.ToDictionary();
  69. return true;
  70. }
  71. }