|  | // 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 <weave/device.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)>; | 
|  |  | 
|  | // 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 RegistrationData& registration_data, | 
|  | ErrorPtr* error) = 0; | 
|  |  | 
|  | // Returns cloud id if the registered device or empty string if unregistered. | 
|  | virtual std::string GetCloudId() const = 0; | 
|  |  | 
|  | // Returns currently active cloud endponts. | 
|  | virtual std::string GetOAuthUrl() const = 0; | 
|  | virtual std::string GetServiceUrl() const = 0; | 
|  | virtual std::string GetXmppEndpoint() const = 0; | 
|  |  | 
|  | // Returns dictionary with component tree. The components contain only the | 
|  | // state visible to the given user. | 
|  | virtual std::unique_ptr<base::DictionaryValue> GetComponentsForUser( | 
|  | const UserInfo& user_info) 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; | 
|  |  | 
|  | virtual void AddOnTraitsChangedCallback(const base::Closure& callback) = 0; | 
|  | virtual void AddOnStateChangedCallback(const base::Closure& callback) = 0; | 
|  | virtual void AddOnComponentsChangeCallback(const base::Closure& callback) = 0; | 
|  |  | 
|  | // Create default instance. | 
|  | static std::unique_ptr<CloudDelegate> CreateDefault( | 
|  | provider::TaskRunner* task_runner, | 
|  | DeviceRegistrationInfo* device, | 
|  | ComponentManager* component_manager); | 
|  | }; | 
|  |  | 
|  | }  // namespace privet | 
|  | }  // namespace weave | 
|  |  | 
|  | #endif  // LIBWEAVE_SRC_PRIVET_CLOUD_DELEGATE_H_ |