#include #include #include #include #include #include namespace tt::app { static const auto LOGGER = Logger("AppRegistration"); typedef std::unordered_map> AppManifestMap; static AppManifestMap app_manifest_map; static Mutex hash_mutex; void addAppManifest(const AppManifest& manifest) { LOGGER.info("Registering manifest {}", manifest.appId); hash_mutex.lock(); if (app_manifest_map.contains(manifest.appId)) { LOGGER.warn("Overwriting existing manifest for {}", manifest.appId); } app_manifest_map[manifest.appId] = std::make_shared(manifest); hash_mutex.unlock(); } bool removeAppManifest(const std::string& id) { LOGGER.info("Removing manifest for {}", id); auto lock = hash_mutex.asScopedLock(); lock.lock(); return app_manifest_map.erase(id) == 1; } std::shared_ptr findAppManifestById(const std::string& id) { hash_mutex.lock(); auto result = app_manifest_map.find(id); hash_mutex.unlock(); if (result != app_manifest_map.end()) { return result->second; } else { return nullptr; } } std::vector> getAppManifests() { std::vector> manifests; hash_mutex.lock(); for (const auto& item: app_manifest_map) { manifests.push_back(item.second); } hash_mutex.unlock(); return manifests; } } // namespace