Aktualizr
C++ SOTA Client
All Classes Namespaces Files Functions Variables Enumerations Enumerator Pages
secondary_config.h
1 #ifndef SECONDARY_CONFIG_H_
2 #define SECONDARY_CONFIG_H_
3 
4 #include <json/json.h>
5 #include <boost/filesystem.hpp>
6 #include <unordered_map>
7 
8 #include "primary/secondary_config.h"
9 #include "virtualsecondary.h"
10 
11 namespace Primary {
12 
14  public:
15  static constexpr const char* const AddrField{"addr"};
16 
17  IPSecondaryConfig(std::string addr_ip, uint16_t addr_port) : ip(std::move(addr_ip)), port(addr_port) {}
18 
19  friend std::ostream& operator<<(std::ostream& os, const IPSecondaryConfig& cfg) {
20  os << "(addr: " << cfg.ip << ":" << cfg.port << ")";
21  return os;
22  }
23 
24  public:
25  const std::string ip;
26  const uint16_t port;
27 };
28 
30  public:
31  static const char* const Type;
32  static constexpr const char* const PortField{"secondaries_wait_port"};
33  static constexpr const char* const TimeoutField{"secondaries_wait_timeout"};
34  static constexpr const char* const SecondariesField{"secondaries"};
35 
36  IPSecondariesConfig(const uint16_t wait_port, const int timeout_s)
37  : SecondaryConfig(Type), secondaries_wait_port{wait_port}, secondaries_timeout_s{timeout_s} {}
38 
39  friend std::ostream& operator<<(std::ostream& os, const IPSecondariesConfig& cfg) {
40  os << "(wait_port: " << cfg.secondaries_wait_port << " timeout_s: " << cfg.secondaries_timeout_s << ")";
41  return os;
42  }
43 
44  public:
45  const uint16_t secondaries_wait_port;
46  const int secondaries_timeout_s;
47  std::vector<IPSecondaryConfig> secondaries_cfg;
48 };
49 
51  public:
52  using Configs = std::vector<std::shared_ptr<SecondaryConfig>>;
53 
54  static Configs parse_config_file(const boost::filesystem::path& config_file);
55  virtual ~SecondaryConfigParser() = default;
56 
57  virtual Configs parse() = 0;
58 };
59 
61  public:
62  JsonConfigParser(const boost::filesystem::path& config_file);
63 
64  Configs parse() override;
65 
66  private:
67  static void createIPSecondariesCfg(Configs& configs, const Json::Value& json_ip_sec_cfg);
68  static void createVirtualSecondariesCfg(Configs& configs, const Json::Value& json_virtual_sec_cfg);
69  // add here a factory method for another type of secondary config
70 
71  private:
72  using SecondaryConfigFactoryRegistry = std::unordered_map<std::string, std::function<void(Configs&, Json::Value&)>>;
73 
74  SecondaryConfigFactoryRegistry sec_cfg_factory_registry_ = {
75  {IPSecondariesConfig::Type, createIPSecondariesCfg}, {VirtualSecondaryConfig::Type, createVirtualSecondariesCfg}
76  // add here factory method for another type of secondary config
77  };
78 
79  Json::Value root_;
80 };
81 
82 } // namespace Primary
83 
84 #endif // SECONDARY_CONFIG_H_
Primary::SecondaryConfig
Definition: secondary_config.h:6
Primary::JsonConfigParser
Definition: secondary_config.h:60
Primary::IPSecondariesConfig
Definition: secondary_config.h:29
Primary::IPSecondaryConfig
Definition: secondary_config.h:13
Primary::SecondaryConfigParser
Definition: secondary_config.h:50