DevTree.h 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. //
  2. // Created by WJG on 2020-5-7.
  3. //
  4. #ifndef NEWCOSS_DEVTREE_H
  5. #define NEWCOSS_DEVTREE_H
  6. #include <mutex>
  7. #include <unordered_map>
  8. #include <unordered_set>
  9. #include <qlibc/StringUtils.hpp>
  10. #include <qlibc/QData.hpp>
  11. #include "json/json.h"
  12. #include "DeviceInfo.h"
  13. #include "../CossCore/FileWriteWorker.h"
  14. #include "../CossCore/coss_comm.h"
  15. class DevTree{
  16. public:
  17. static DevTree& GetInstance()
  18. {
  19. if ( m_pInstance == nullptr )
  20. m_pInstance = new DevTree();
  21. return *m_pInstance;
  22. };
  23. ~DevTree();
  24. static std::string config_file_dir;
  25. static std::string config_file_dir_init;
  26. int initDevTree(const std::string &file_dir, const std::string& init_dir);
  27. Json::Value getAllDev();
  28. string getDevInfo(const std::string &device_id, const std::string &key);
  29. void getDevInfoAsJsonValue(Json::Value &val, const string &device_id, const string &key);
  30. Json::Value getDevAllInfo(const std::string &device_id);
  31. void getDevAllInfo(Json::Value &ret, const string &device_id);
  32. int updateDeviceInfo(const std::string &device_id, const Json::Value &info);
  33. int updateDeviceInfo(const std::string &device_id, const std::string &key, const std::string &value);
  34. int cacheDeviceInfo(const std::string &device_id, const Json::Value &info);
  35. bool cachesaveDeviceInfo(const std::string &device_id, const Json::Value &info);
  36. int addUserLocation(const Json::Value &location);
  37. int deleteUserLocation(const Json::Value &location);
  38. // void printGroupInfo();
  39. std::vector<std::string> getDevbyGroup(const std::string &nick_name, const std::string &device_type,const std::string &device_location);
  40. Json::Value getDevbyLocation(const std::string &location);
  41. Json::Value getDevBaseInfo(const std::string &device_id);
  42. int rmLocationDev(const std::string &device_id, const std::string &location_name);
  43. std::string getDevbyAddress(const std::string &device_addr);
  44. std::string getDevbyUuid(const std::string &device_uuid);
  45. bool hasDevice(const std::string &device_id);
  46. int deleteDevice(const std::string &device_id);
  47. int addNewDevice(const std::string &device_id, const Json::Value &info);
  48. int deleteDeviceInfo(const std::string &device_id, const std::string &key);
  49. Json::Value getGroupDevice();
  50. int deleteGroupDevice(const std::string& device_id);
  51. int cacheOtherDevice(const std::string &device_id, const Json::Value &info);
  52. std::vector<std::string> getDevbyNickName(const std::string &nick_name);
  53. int updateNickNameMap(const std::string &device_id, const std::string &nick_name, const std::string &old_name);
  54. void saveDeviceInfo(const std::string& device_id);
  55. // int saveDefaultGroupAddrDev(const std::string& gpadr, const Json::Value& dev);
  56. // Json::Value getDefaultGroupAddrDev();
  57. // void delDefaultGroupAddrDev();
  58. int updatePanelName(const std::string& nick_name);
  59. int updatePanelUUID(const std::string& uuid);
  60. int updatePanelMac(const std::string& mac);
  61. std::string getPanelName();
  62. std::string getPanelUUID();
  63. std::string getPanelMac();
  64. bool hasDefaultGroupId(const std::string &gp_id);
  65. void setDefaultGroupId(const std::string &groupAddr);
  66. //获取所有原始设备的短地址列表,不包含组地址
  67. void getAtomDevShortAddrList(QStringList& list, const std::string& type = "", const std::string& devClass = "");
  68. DeviceInfo* getDevInfoByAddress(const std::string &device_address);
  69. void removeDuplicatedWired();
  70. void upgradeGroupIdFormmat();
  71. private:
  72. static DevTree* m_pInstance;
  73. std::recursive_mutex treeMutex;
  74. FileWriteWorker *filewriteWorker;
  75. unordered_map<std::string, DeviceInfo> allDevice;
  76. //unordered_map<分组类型名,unordered_map<分组名,unordered_set<设备id>>
  77. unordered_map<std::string, unordered_map<std::string,unordered_set<std::string>>> groupInfo;
  78. unordered_map<std::string, std::string> devAddrIdMap;
  79. unordered_map<std::string, std::string> devUuidIdMap;
  80. unordered_set<std::string> groupDevices;
  81. unordered_map<std::string,unordered_set<std::string>> devNickNameMap;
  82. DevTree();
  83. int initGroupInfoKey();
  84. int updateLocationKey(int opt, const Json::Value &value);
  85. int updateDeviceLocation(const unordered_set<std::string> &device_set, const std::string &location);
  86. int updateGroupInfo(const std::string &device_id, const Json::Value &value);
  87. int CreatDeviceInfo(const std::string &file_dir);
  88. std::mutex devFileMutex;
  89. std::string defaultLightGroupId;
  90. qlibc::QData mCossConfig;
  91. unordered_set<std::string> defaultGroupAddress_set;
  92. #ifdef DEVICE_FILE_TEST
  93. Json::Value parseFromFile(const string &fn);
  94. #endif
  95. };
  96. #endif //NEWCOSS_DEVTREE_H