1// Copyright 2015 The Weave Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef LIBWEAVE_SRC_DEVICE_MANAGER_H_
6#define LIBWEAVE_SRC_DEVICE_MANAGER_H_
7
8#include <base/memory/weak_ptr.h>
9#include <weave/device.h>
10
11namespace weave {
12
13class AccessApiHandler;
14class AccessBlackListManager;
15class BaseApiHandler;
16class Config;
17class ComponentManager;
18class DeviceRegistrationInfo;
19
20namespace privet {
21class AuthManager;
22class Manager;
23}  // namespace privet
24
25class DeviceManager final : public Device {
26 public:
27  DeviceManager(provider::ConfigStore* config_store,
28                provider::TaskRunner* task_runner,
29                provider::HttpClient* http_client,
30                provider::Network* network,
31                provider::DnsServiceDiscovery* dns_sd,
32                provider::HttpServer* http_server,
33                provider::Wifi* wifi,
34                provider::Bluetooth* bluetooth);
35  ~DeviceManager() override;
36
37  // Device implementation.
38  const Settings& GetSettings() const override;
39  void AddSettingsChangedCallback(
40      const SettingsChangedCallback& callback) override;
41  void AddTraitDefinitionsFromJson(const std::string& json) override;
42  void AddTraitDefinitions(const base::DictionaryValue& dict) override;
43  const base::DictionaryValue& GetTraits() const override;
44  void AddTraitDefsChangedCallback(const base::Closure& callback) override;
45  bool AddComponent(const std::string& name,
46                    const std::vector<std::string>& traits,
47                    ErrorPtr* error) override;
48  bool RemoveComponent(const std::string& name, ErrorPtr* error) override;
49  void AddComponentTreeChangedCallback(const base::Closure& callback) override;
50  const base::DictionaryValue& GetComponents() const override;
51  bool SetStatePropertiesFromJson(const std::string& component,
52                                  const std::string& json,
53                                  ErrorPtr* error) override;
54  bool SetStateProperties(const std::string& component,
55                          const base::DictionaryValue& dict,
56                          ErrorPtr* error) override;
57  const base::Value* GetStateProperty(const std::string& component,
58                                      const std::string& name,
59                                      ErrorPtr* error) const override;
60  bool SetStateProperty(const std::string& component,
61                        const std::string& name,
62                        const base::Value& value,
63                        ErrorPtr* error) override;
64  void AddCommandHandler(const std::string& component,
65                         const std::string& command_name,
66                         const CommandHandlerCallback& callback) override;
67  bool AddCommand(const base::DictionaryValue& command,
68                  std::string* id,
69                  ErrorPtr* error) override;
70  Command* FindCommand(const std::string& id) override;
71  void AddStateChangedCallback(const base::Closure& callback) override;
72  void Register(const std::string& ticket_id,
73                const DoneCallback& callback) override;
74  GcdState GetGcdState() const override;
75  void AddGcdStateChangedCallback(
76      const GcdStateChangedCallback& callback) override;
77  void AddPairingChangedCallbacks(
78      const PairingBeginCallback& begin_callback,
79      const PairingEndCallback& end_callback) override;
80
81  void AddCommandDefinitionsFromJson(const std::string& json) override;
82  void AddCommandDefinitions(const base::DictionaryValue& dict) override;
83  void AddCommandHandler(const std::string& command_name,
84                         const CommandHandlerCallback& callback) override;
85  void AddStateDefinitionsFromJson(const std::string& json) override;
86  void AddStateDefinitions(const base::DictionaryValue& dict) override;
87  bool SetStatePropertiesFromJson(const std::string& json,
88                                  ErrorPtr* error) override;
89  bool SetStateProperties(const base::DictionaryValue& dict,
90                          ErrorPtr* error) override;
91  const base::Value* GetStateProperty(const std::string& name) const override;
92  bool SetStateProperty(const std::string& name,
93                        const base::Value& value,
94                        ErrorPtr* error) override;
95  const base::DictionaryValue& GetState() const override;
96
97  Config* GetConfig();
98
99 private:
100  void StartPrivet(provider::TaskRunner* task_runner,
101                   provider::Network* network,
102                   provider::DnsServiceDiscovery* dns_sd,
103                   provider::HttpServer* http_server,
104                   provider::Wifi* wifi,
105                   provider::Bluetooth* bluetooth);
106
107  std::unique_ptr<Config> config_;
108  std::unique_ptr<privet::AuthManager> auth_manager_;
109  std::unique_ptr<ComponentManager> component_manager_;
110  std::unique_ptr<DeviceRegistrationInfo> device_info_;
111  std::unique_ptr<BaseApiHandler> base_api_handler_;
112  std::unique_ptr<AccessBlackListManager> black_list_manager_;
113  std::unique_ptr<AccessApiHandler> access_api_handler_;
114  std::unique_ptr<privet::Manager> privet_;
115
116  base::WeakPtrFactory<DeviceManager> weak_ptr_factory_{this};
117  DISALLOW_COPY_AND_ASSIGN(DeviceManager);
118};
119
120}  // namespace weave
121
122#endif  // LIBWEAVE_SRC_DEVICE_MANAGER_H_
123