Aktualizr
C++ SOTA Client
packagemanagerfactory.h
1 #ifndef PACKAGEMANAGERFACTORY_H_
2 #define PACKAGEMANAGERFACTORY_H_
3 
4 #include "libaktualizr/config.h"
5 #include "libaktualizr/packagemanagerinterface.h"
6 
7 class INvStorage;
8 
9 using PackageManagerBuilder =
10  std::function<PackageManagerInterface*(const PackageConfig&, const BootloaderConfig&,
11  const std::shared_ptr<INvStorage>&, const std::shared_ptr<HttpInterface>&)>;
12 
14  public:
15  static bool registerPackageManager(const char* name, PackageManagerBuilder builder);
16  static std::shared_ptr<PackageManagerInterface> makePackageManager(const PackageConfig& pconfig,
17  const BootloaderConfig& bconfig,
18  const std::shared_ptr<INvStorage>& storage,
19  const std::shared_ptr<HttpInterface>& http);
20 };
21 
22 // macro to auto-register a package manager
23 // note that static library users will have to call `registerPackageManager` manually
24 
25 #define AUTO_REGISTER_PACKAGE_MANAGER(name, clsname) \
26  class clsname##_PkgMRegister_ { \
27  public: \
28  clsname##_PkgMRegister_() { \
29  PackageManagerFactory::registerPackageManager( \
30  name, [](const PackageConfig& pconfig, const BootloaderConfig& bconfig, \
31  const std::shared_ptr<INvStorage>& storage, const std::shared_ptr<HttpInterface>& http) { \
32  return new clsname(pconfig, bconfig, storage, http); \
33  }); \
34  } \
35  }; \
36  static clsname##_PkgMRegister_ clsname##_register_
37 
38 #endif // PACKAGEMANAGERFACTORY_H_
PackageManagerInterface
Definition: packagemanagerinterface.h:42
PackageManagerFactory
Definition: packagemanagerfactory.h:13
PackageConfig
Definition: config.h:91
BootloaderConfig
Definition: config.h:156
INvStorage
Definition: invstorage.h:43