• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2015 The Weave Authors. All rights reserved.
2 // 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_PRIVET_CLOUD_DELEGATE_H_
6 #define LIBWEAVE_SRC_PRIVET_CLOUD_DELEGATE_H_
7 
8 #include <memory>
9 #include <set>
10 #include <string>
11 
12 #include <base/callback.h>
13 #include <base/memory/ref_counted.h>
14 #include <base/observer_list.h>
15 
16 #include "src/privet/privet_types.h"
17 #include "src/privet/security_delegate.h"
18 
19 namespace base {
20 class DictionaryValue;
21 }  // namespace base
22 
23 namespace weave {
24 
25 class ComponentManager;
26 class DeviceRegistrationInfo;
27 
28 namespace provider {
29 class TaskRunner;
30 }
31 
32 namespace privet {
33 
34 // Interface to provide GCD functionality for PrivetHandler.
35 // TODO(vitalybuka): Rename to BuffetDelegate.
36 class CloudDelegate {
37  public:
38   CloudDelegate();
39   virtual ~CloudDelegate();
40 
41   using CommandDoneCallback =
42       base::Callback<void(const base::DictionaryValue& commands,
43                           ErrorPtr error)>;
44 
45   class Observer {
46    public:
~Observer()47     virtual ~Observer() {}
48 
OnDeviceInfoChanged()49     virtual void OnDeviceInfoChanged() {}
OnTraitDefsChanged()50     virtual void OnTraitDefsChanged() {}
OnStateChanged()51     virtual void OnStateChanged() {}
OnComponentTreeChanged()52     virtual void OnComponentTreeChanged() {}
53   };
54 
55   // Returns the ID of the device.
56   virtual std::string GetDeviceId() const = 0;
57 
58   // Returns the model ID of the device.
59   virtual std::string GetModelId() const = 0;
60 
61   // Returns the name of device.
62   virtual std::string GetName() const = 0;
63 
64   // Returns the description of the device.
65   virtual std::string GetDescription() const = 0;
66 
67   // Returns the location of the device.
68   virtual std::string GetLocation() const = 0;
69 
70   // Update basic device information.
71   virtual void UpdateDeviceInfo(const std::string& name,
72                                 const std::string& description,
73                                 const std::string& location) = 0;
74 
75   // Returns the name of the maker.
76   virtual std::string GetOemName() const = 0;
77 
78   // Returns the model name of the device.
79   virtual std::string GetModelName() const = 0;
80 
81   // Returns max scope available for anonymous user.
82   virtual AuthScope GetAnonymousMaxScope() const = 0;
83 
84   // Returns status of the GCD connection.
85   virtual const ConnectionState& GetConnectionState() const = 0;
86 
87   // Returns status of the last setup.
88   virtual const SetupState& GetSetupState() const = 0;
89 
90   // Starts GCD setup.
91   virtual bool Setup(const std::string& ticket_id,
92                      const std::string& user,
93                      ErrorPtr* error) = 0;
94 
95   // Returns cloud id if the registered device or empty string if unregistered.
96   virtual std::string GetCloudId() const = 0;
97 
98   // Returns dictionary with device state (for legacy APIs).
99   virtual const base::DictionaryValue& GetLegacyState() const = 0;
100 
101   // Returns dictionary with commands definitions (for legacy APIs).
102   virtual const base::DictionaryValue& GetLegacyCommandDef() const = 0;
103 
104   // Returns dictionary with component tree.
105   virtual const base::DictionaryValue& GetComponents() const = 0;
106 
107   // Finds a component at the given path. Return nullptr in case of an error.
108   virtual const base::DictionaryValue* FindComponent(const std::string& path,
109                                                      ErrorPtr* error) const = 0;
110 
111   // Returns dictionary with trait definitions.
112   virtual const base::DictionaryValue& GetTraits() const = 0;
113 
114   // Adds command created from the given JSON representation.
115   virtual void AddCommand(const base::DictionaryValue& command,
116                           const UserInfo& user_info,
117                           const CommandDoneCallback& callback) = 0;
118 
119   // Returns command with the given ID.
120   virtual void GetCommand(const std::string& id,
121                           const UserInfo& user_info,
122                           const CommandDoneCallback& callback) = 0;
123 
124   // Cancels command with the given ID.
125   virtual void CancelCommand(const std::string& id,
126                              const UserInfo& user_info,
127                              const CommandDoneCallback& callback) = 0;
128 
129   // Lists commands.
130   virtual void ListCommands(const UserInfo& user_info,
131                             const CommandDoneCallback& callback) = 0;
132 
AddObserver(Observer * observer)133   void AddObserver(Observer* observer) { observer_list_.AddObserver(observer); }
RemoveObserver(Observer * observer)134   void RemoveObserver(Observer* observer) {
135     observer_list_.RemoveObserver(observer);
136   }
137 
138   void NotifyOnDeviceInfoChanged();
139   void NotifyOnTraitDefsChanged();
140   void NotifyOnStateChanged();
141   void NotifyOnComponentTreeChanged();
142 
143   // Create default instance.
144   static std::unique_ptr<CloudDelegate> CreateDefault(
145       provider::TaskRunner* task_runner,
146       DeviceRegistrationInfo* device,
147       ComponentManager* component_manager);
148 
149  private:
150   base::ObserverList<Observer> observer_list_;
151 };
152 
153 }  // namespace privet
154 }  // namespace weave
155 
156 #endif  // LIBWEAVE_SRC_PRIVET_CLOUD_DELEGATE_H_
157