| // 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_PRIVET_CLOUD_DELEGATE_H_ | |
| #define LIBWEAVE_SRC_PRIVET_CLOUD_DELEGATE_H_ | |
| #include <memory> | |
| #include <set> | |
| #include <string> | |
| #include <base/callback.h> | |
| #include <base/memory/ref_counted.h> | |
| #include <base/observer_list.h> | |
| #include "src/privet/privet_types.h" | |
| #include "src/privet/security_delegate.h" | |
| namespace base { | |
| class DictionaryValue; | |
| } // namespace base | |
| namespace weave { | |
| class ComponentManager; | |
| class DeviceRegistrationInfo; | |
| namespace provider { | |
| class TaskRunner; | |
| } | |
| namespace privet { | |
| // Interface to provide GCD functionality for PrivetHandler. | |
| // TODO(vitalybuka): Rename to BuffetDelegate. | |
| class CloudDelegate { | |
| public: | |
| CloudDelegate(); | |
| virtual ~CloudDelegate(); | |
| using CommandDoneCallback = | |
| base::Callback<void(const base::DictionaryValue& commands, | |
| ErrorPtr error)>; | |
| class Observer { | |
| public: | |
| virtual ~Observer() {} | |
| virtual void OnDeviceInfoChanged() {} | |
| virtual void OnTraitDefsChanged() {} | |
| virtual void OnStateChanged() {} | |
| virtual void OnComponentTreeChanged() {} | |
| }; | |
| // Returns the ID of the device. | |
| virtual std::string GetDeviceId() const = 0; | |
| // Returns the model ID of the device. | |
| virtual std::string GetModelId() const = 0; | |
| // Returns the name of device. | |
| virtual std::string GetName() const = 0; | |
| // Returns the description of the device. | |
| virtual std::string GetDescription() const = 0; | |
| // Returns the location of the device. | |
| virtual std::string GetLocation() const = 0; | |
| // Update basic device information. | |
| virtual void UpdateDeviceInfo(const std::string& name, | |
| const std::string& description, | |
| const std::string& location) = 0; | |
| // Returns the name of the maker. | |
| virtual std::string GetOemName() const = 0; | |
| // Returns the model name of the device. | |
| virtual std::string GetModelName() const = 0; | |
| // Returns max scope available for anonymous user. | |
| virtual AuthScope GetAnonymousMaxScope() const = 0; | |
| // Returns status of the GCD connection. | |
| virtual const ConnectionState& GetConnectionState() const = 0; | |
| // Returns status of the last setup. | |
| virtual const SetupState& GetSetupState() const = 0; | |
| // Starts GCD setup. | |
| virtual bool Setup(const std::string& ticket_id, | |
| const std::string& user, | |
| ErrorPtr* error) = 0; | |
| // Returns cloud id if the registered device or empty string if unregistered. | |
| virtual std::string GetCloudId() const = 0; | |
| // Returns dictionary with device state (for legacy APIs). | |
| virtual const base::DictionaryValue& GetLegacyState() const = 0; | |
| // Returns dictionary with commands definitions (for legacy APIs). | |
| virtual const base::DictionaryValue& GetLegacyCommandDef() const = 0; | |
| // Returns dictionary with component tree. | |
| virtual const base::DictionaryValue& GetComponents() const = 0; | |
| // Finds a component at the given path. Return nullptr in case of an error. | |
| virtual const base::DictionaryValue* FindComponent(const std::string& path, | |
| ErrorPtr* error) const = 0; | |
| // Returns dictionary with trait definitions. | |
| virtual const base::DictionaryValue& GetTraits() const = 0; | |
| // Adds command created from the given JSON representation. | |
| virtual void AddCommand(const base::DictionaryValue& command, | |
| const UserInfo& user_info, | |
| const CommandDoneCallback& callback) = 0; | |
| // Returns command with the given ID. | |
| virtual void GetCommand(const std::string& id, | |
| const UserInfo& user_info, | |
| const CommandDoneCallback& callback) = 0; | |
| // Cancels command with the given ID. | |
| virtual void CancelCommand(const std::string& id, | |
| const UserInfo& user_info, | |
| const CommandDoneCallback& callback) = 0; | |
| // Lists commands. | |
| virtual void ListCommands(const UserInfo& user_info, | |
| const CommandDoneCallback& callback) = 0; | |
| void AddObserver(Observer* observer) { observer_list_.AddObserver(observer); } | |
| void RemoveObserver(Observer* observer) { | |
| observer_list_.RemoveObserver(observer); | |
| } | |
| void NotifyOnDeviceInfoChanged(); | |
| void NotifyOnTraitDefsChanged(); | |
| void NotifyOnStateChanged(); | |
| void NotifyOnComponentTreeChanged(); | |
| // Create default instance. | |
| static std::unique_ptr<CloudDelegate> CreateDefault( | |
| provider::TaskRunner* task_runner, | |
| DeviceRegistrationInfo* device, | |
| ComponentManager* component_manager); | |
| private: | |
| base::ObserverList<Observer> observer_list_; | |
| }; | |
| } // namespace privet | |
| } // namespace weave | |
| #endif // LIBWEAVE_SRC_PRIVET_CLOUD_DELEGATE_H_ |