blob: 545f29328a25a9ef830ad01193696c49361386d9 [file] [log] [blame]
Vitaly Buka4615e0d2015-10-14 15:35:12 -07001// Copyright 2015 The Weave Authors. All rights reserved.
Vitaly Buka0fa51e52015-07-10 00:12:25 -07002// 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
Vitaly Buka8b4ab962015-07-14 19:19:39 -07008#include <base/memory/weak_ptr.h>
Vitaly Buka7b382ac2015-08-03 13:50:01 -07009#include <weave/device.h>
Vitaly Buka0fa51e52015-07-10 00:12:25 -070010
Vitaly Buka0fa51e52015-07-10 00:12:25 -070011namespace weave {
12
Vitaly Buka5a7c4f52016-01-21 15:09:34 -080013class AccessApiHandler;
Vitaly Bukaebde3c12016-02-23 18:50:42 -080014class AccessRevocationManager;
Vitaly Buka0fa51e52015-07-10 00:12:25 -070015class BaseApiHandler;
Vitaly Bukac11a17d2015-08-15 10:36:10 -070016class Config;
Alex Vakulenkoe79fa912015-12-04 17:24:15 -080017class ComponentManager;
Vitaly Buka0fa51e52015-07-10 00:12:25 -070018class DeviceRegistrationInfo;
Vitaly Buka0fa51e52015-07-10 00:12:25 -070019
20namespace privet {
Vitaly Buka3d851b42015-12-08 16:17:01 -080021class AuthManager;
Vitaly Buka0fa51e52015-07-10 00:12:25 -070022class Manager;
23} // namespace privet
24
25class DeviceManager final : public Device {
26 public:
Vitaly Bukac5bdd172015-10-01 19:48:51 -070027 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);
Vitaly Buka0fa51e52015-07-10 00:12:25 -070035 ~DeviceManager() override;
36
Vitaly Bukaae6b35d2015-09-29 23:16:54 -070037 // Device implementation.
Vitaly Bukaa8ece8f2015-10-05 13:30:23 -070038 const Settings& GetSettings() const override;
Vitaly Bukaae6b35d2015-09-29 23:16:54 -070039 void AddSettingsChangedCallback(
40 const SettingsChangedCallback& callback) override;
Alex Vakulenkoe79fa912015-12-04 17:24:15 -080041 void AddTraitDefinitionsFromJson(const std::string& json) override;
42 void AddTraitDefinitions(const base::DictionaryValue& dict) override;
43 const base::DictionaryValue& GetTraits() const override;
Alex Vakulenkoec9d8482015-12-10 10:16:21 -080044 void AddTraitDefsChangedCallback(const base::Closure& callback) override;
Alex Vakulenkoe79fa912015-12-04 17:24:15 -080045 bool AddComponent(const std::string& name,
46 const std::vector<std::string>& traits,
47 ErrorPtr* error) override;
Alex Vakulenkoce850b52016-01-04 09:27:50 -080048 bool RemoveComponent(const std::string& name, ErrorPtr* error) override;
Alex Vakulenkoe79fa912015-12-04 17:24:15 -080049 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;
Vitaly Bukaa8ece8f2015-10-05 13:30:23 -070067 bool AddCommand(const base::DictionaryValue& command,
68 std::string* id,
69 ErrorPtr* error) override;
70 Command* FindCommand(const std::string& id) override;
Alex Vakulenkoe79fa912015-12-04 17:24:15 -080071 void AddStateChangedCallback(const base::Closure& callback) override;
Vitaly Buka03ee8ac2016-02-05 11:40:33 -080072 void Register(const RegistrationData& registration_data,
Alex Vakulenkoe79fa912015-12-04 17:24:15 -080073 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
Vitaly Bukac11a17d2015-08-15 10:36:10 -070081 Config* GetConfig();
82
Vitaly Buka0fa51e52015-07-10 00:12:25 -070083 private:
Vitaly Buka41a90d62015-09-29 16:58:39 -070084 void StartPrivet(provider::TaskRunner* task_runner,
Vitaly Buka1e363672015-09-25 14:01:16 -070085 provider::Network* network,
86 provider::DnsServiceDiscovery* dns_sd,
87 provider::HttpServer* http_server,
88 provider::Wifi* wifi,
89 provider::Bluetooth* bluetooth);
Vitaly Buka0fa51e52015-07-10 00:12:25 -070090
Vitaly Buka666b43e2015-12-08 16:35:47 -080091 std::unique_ptr<Config> config_;
Vitaly Buka3d851b42015-12-08 16:17:01 -080092 std::unique_ptr<privet::AuthManager> auth_manager_;
Alex Vakulenkoe79fa912015-12-04 17:24:15 -080093 std::unique_ptr<ComponentManager> component_manager_;
Vitaly Buka0fa51e52015-07-10 00:12:25 -070094 std::unique_ptr<DeviceRegistrationInfo> device_info_;
95 std::unique_ptr<BaseApiHandler> base_api_handler_;
Vitaly Bukaebde3c12016-02-23 18:50:42 -080096 std::unique_ptr<AccessRevocationManager> access_revocation_manager_;
Vitaly Buka5a7c4f52016-01-21 15:09:34 -080097 std::unique_ptr<AccessApiHandler> access_api_handler_;
Vitaly Buka0fa51e52015-07-10 00:12:25 -070098 std::unique_ptr<privet::Manager> privet_;
99
100 base::WeakPtrFactory<DeviceManager> weak_ptr_factory_{this};
101 DISALLOW_COPY_AND_ASSIGN(DeviceManager);
102};
103
104} // namespace weave
105
106#endif // LIBWEAVE_SRC_DEVICE_MANAGER_H_