blob: c41a627b34882cdebde0d01e1b5c2d08683b59de [file] [log] [blame]
// Copyright 2015 The Weave Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef LIBWEAVE_SRC_DEVICE_MANAGER_H_
#define LIBWEAVE_SRC_DEVICE_MANAGER_H_
#include <base/memory/weak_ptr.h>
#include <weave/device.h>
namespace weave {
class AccessApiHandler;
class AccessRevocationManager;
class BaseApiHandler;
class Config;
class ComponentManager;
class DeviceRegistrationInfo;
namespace privet {
class AuthManager;
class Manager;
} // namespace privet
class DeviceManager final : public Device {
public:
DeviceManager(provider::ConfigStore* config_store,
provider::TaskRunner* task_runner,
provider::HttpClient* http_client,
provider::Network* network,
provider::DnsServiceDiscovery* dns_sd,
provider::HttpServer* http_server,
provider::Wifi* wifi,
provider::Bluetooth* bluetooth);
~DeviceManager() override;
// Device implementation.
const Settings& GetSettings() const override;
void AddSettingsChangedCallback(
const SettingsChangedCallback& callback) override;
void AddTraitDefinitionsFromJson(const std::string& json) override;
void AddTraitDefinitions(const base::DictionaryValue& dict) override;
const base::DictionaryValue& GetTraits() const override;
void AddTraitDefsChangedCallback(const base::Closure& callback) override;
bool AddComponent(const std::string& name,
const std::vector<std::string>& traits,
ErrorPtr* error) override;
bool RemoveComponent(const std::string& name, ErrorPtr* error) override;
void AddComponentTreeChangedCallback(const base::Closure& callback) override;
const base::DictionaryValue& GetComponents() const override;
bool SetStatePropertiesFromJson(const std::string& component,
const std::string& json,
ErrorPtr* error) override;
bool SetStateProperties(const std::string& component,
const base::DictionaryValue& dict,
ErrorPtr* error) override;
const base::Value* GetStateProperty(const std::string& component,
const std::string& name,
ErrorPtr* error) const override;
bool SetStateProperty(const std::string& component,
const std::string& name,
const base::Value& value,
ErrorPtr* error) override;
void AddCommandHandler(const std::string& component,
const std::string& command_name,
const CommandHandlerCallback& callback) override;
bool AddCommand(const base::DictionaryValue& command,
std::string* id,
ErrorPtr* error) override;
Command* FindCommand(const std::string& id) override;
void AddStateChangedCallback(const base::Closure& callback) override;
void Register(const RegistrationData& registration_data,
const DoneCallback& callback) override;
GcdState GetGcdState() const override;
void AddGcdStateChangedCallback(
const GcdStateChangedCallback& callback) override;
void AddPairingChangedCallbacks(
const PairingBeginCallback& begin_callback,
const PairingEndCallback& end_callback) override;
Config* GetConfig();
private:
void StartPrivet();
void StopPrivet();
void OnSettingsChanged(const Settings& settings);
provider::TaskRunner* task_runner_{nullptr};
provider::Network* network_{nullptr};
provider::DnsServiceDiscovery* dns_sd_{nullptr};
provider::HttpServer* http_server_{nullptr};
provider::Wifi* wifi_{nullptr};
std::unique_ptr<Config> config_;
std::unique_ptr<privet::AuthManager> auth_manager_;
std::unique_ptr<ComponentManager> component_manager_;
std::unique_ptr<DeviceRegistrationInfo> device_info_;
std::unique_ptr<BaseApiHandler> base_api_handler_;
std::unique_ptr<AccessRevocationManager> access_revocation_manager_;
std::unique_ptr<AccessApiHandler> access_api_handler_;
std::unique_ptr<privet::Manager> privet_;
base::WeakPtrFactory<DeviceManager> weak_ptr_factory_{this};
DISALLOW_COPY_AND_ASSIGN(DeviceManager);
};
} // namespace weave
#endif // LIBWEAVE_SRC_DEVICE_MANAGER_H_