blob: 8763fbe43be63c8da54fe8c9fecc3c7f16a0707b [file] [log] [blame]
Vitaly Buka4615e0d2015-10-14 15:35:12 -07001// Copyright 2015 The Weave Authors. All rights reserved.
Vitaly Buka7ce499f2015-06-09 08:04:11 -07002// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
Vitaly Buka912b6982015-07-06 11:13:03 -07005#ifndef LIBWEAVE_SRC_PRIVET_CLOUD_DELEGATE_H_
6#define LIBWEAVE_SRC_PRIVET_CLOUD_DELEGATE_H_
Vitaly Buka7ce499f2015-06-09 08:04:11 -07007
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
Stefan Sauer2d16dfa2015-09-25 17:08:35 +020016#include "src/privet/privet_types.h"
17#include "src/privet/security_delegate.h"
Vitaly Buka7ce499f2015-06-09 08:04:11 -070018
19namespace base {
20class DictionaryValue;
21} // namespace base
22
Vitaly Bukab6f015a2015-07-09 14:59:23 -070023namespace weave {
24
Vitaly Buka7ab89ff2015-06-09 22:11:40 -070025class CommandManager;
26class DeviceRegistrationInfo;
27class StateManager;
Vitaly Buka1e363672015-09-25 14:01:16 -070028
29namespace provider {
Vitaly Buka823fdda2015-08-13 00:33:00 -070030class TaskRunner;
Vitaly Buka1e363672015-09-25 14:01:16 -070031}
Vitaly Buka7ce499f2015-06-09 08:04:11 -070032
Vitaly Bukab6f015a2015-07-09 14:59:23 -070033namespace privet {
Vitaly Buka7ce499f2015-06-09 08:04:11 -070034
35// Interface to provide GCD functionality for PrivetHandler.
36// TODO(vitalybuka): Rename to BuffetDelegate.
37class CloudDelegate {
38 public:
39 CloudDelegate();
40 virtual ~CloudDelegate();
41
Vitaly Buka74763422015-10-11 00:39:52 -070042 using CommandDoneCallback =
43 base::Callback<void(const base::DictionaryValue& commands,
44 ErrorPtr error)>;
Vitaly Buka7ce499f2015-06-09 08:04:11 -070045
46 class Observer {
47 public:
48 virtual ~Observer() = default;
49
50 virtual void OnDeviceInfoChanged() {}
51 virtual void OnCommandDefsChanged() {}
52 virtual void OnStateChanged() {}
53 };
54
Johan Euphrosine0b7bb9f2015-09-29 01:11:21 -070055 // Returns the ID of the device.
56 virtual std::string GetDeviceId() const = 0;
57
Vitaly Buka7ce499f2015-06-09 08:04:11 -070058 // Returns the model ID of the device.
Vitaly Buka658aa362015-09-15 20:59:12 -070059 virtual std::string GetModelId() const = 0;
Vitaly Buka7ce499f2015-06-09 08:04:11 -070060
61 // Returns the name of device.
Vitaly Buka658aa362015-09-15 20:59:12 -070062 virtual std::string GetName() const = 0;
Vitaly Buka7ce499f2015-06-09 08:04:11 -070063
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,
Vitaly Bukab624bc42015-09-29 19:13:55 -070073 const std::string& location) = 0;
Vitaly Buka7ce499f2015-06-09 08:04:11 -070074
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
Vitaly Buka7ce499f2015-06-09 08:04:11 -070081 // 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,
Vitaly Buka0801a1f2015-08-14 10:03:46 -070093 ErrorPtr* error) = 0;
Vitaly Buka7ce499f2015-06-09 08:04:11 -070094
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.
99 virtual const base::DictionaryValue& GetState() const = 0;
100
101 // Returns dictionary with commands definitions.
102 virtual const base::DictionaryValue& GetCommandDef() const = 0;
103
104 // Adds command created from the given JSON representation.
105 virtual void AddCommand(const base::DictionaryValue& command,
106 const UserInfo& user_info,
Vitaly Buka74763422015-10-11 00:39:52 -0700107 const CommandDoneCallback& callback) = 0;
Vitaly Buka7ce499f2015-06-09 08:04:11 -0700108
109 // Returns command with the given ID.
110 virtual void GetCommand(const std::string& id,
111 const UserInfo& user_info,
Vitaly Buka74763422015-10-11 00:39:52 -0700112 const CommandDoneCallback& callback) = 0;
Vitaly Buka7ce499f2015-06-09 08:04:11 -0700113
114 // Cancels command with the given ID.
115 virtual void CancelCommand(const std::string& id,
116 const UserInfo& user_info,
Vitaly Buka74763422015-10-11 00:39:52 -0700117 const CommandDoneCallback& callback) = 0;
Vitaly Buka7ce499f2015-06-09 08:04:11 -0700118
119 // Lists commands.
120 virtual void ListCommands(const UserInfo& user_info,
Vitaly Buka74763422015-10-11 00:39:52 -0700121 const CommandDoneCallback& callback) = 0;
Vitaly Buka7ce499f2015-06-09 08:04:11 -0700122
123 void AddObserver(Observer* observer) { observer_list_.AddObserver(observer); }
124 void RemoveObserver(Observer* observer) {
125 observer_list_.RemoveObserver(observer);
126 }
127
128 void NotifyOnDeviceInfoChanged();
129 void NotifyOnCommandDefsChanged();
130 void NotifyOnStateChanged();
131
132 // Create default instance.
133 static std::unique_ptr<CloudDelegate> CreateDefault(
Vitaly Buka1e363672015-09-25 14:01:16 -0700134 provider::TaskRunner* task_runner,
Vitaly Bukab6f015a2015-07-09 14:59:23 -0700135 DeviceRegistrationInfo* device,
136 CommandManager* command_manager,
137 StateManager* state_manager);
Vitaly Buka7ce499f2015-06-09 08:04:11 -0700138
139 private:
Alex Vakulenkoae1ffbc2015-06-15 12:53:22 -0700140 base::ObserverList<Observer> observer_list_;
Vitaly Buka7ce499f2015-06-09 08:04:11 -0700141};
142
Vitaly Bukab6f015a2015-07-09 14:59:23 -0700143} // namespace privet
144} // namespace weave
Vitaly Buka7ce499f2015-06-09 08:04:11 -0700145
Vitaly Buka912b6982015-07-06 11:13:03 -0700146#endif // LIBWEAVE_SRC_PRIVET_CLOUD_DELEGATE_H_