| // 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; | 
 |  | 
 |   // 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_ |