| // 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_COMMANDS_COMMAND_MANAGER_H_ | |
| #define LIBWEAVE_SRC_COMMANDS_COMMAND_MANAGER_H_ | |
| #include <memory> | |
| #include <string> | |
| #include <vector> | |
| #include <base/callback.h> | |
| #include <base/macros.h> | |
| #include <base/memory/weak_ptr.h> | |
| #include "src/commands/command_dictionary.h" | |
| #include "src/commands/command_queue.h" | |
| namespace weave { | |
| class CommandInstance; | |
| // CommandManager class that will have a list of all the device command | |
| // schemas as well as the live command queue of pending command instances | |
| // dispatched to the device. | |
| class CommandManager final { | |
| public: | |
| CommandManager(); | |
| ~CommandManager(); | |
| bool AddCommand(const base::DictionaryValue& command, | |
| std::string* id, | |
| ErrorPtr* error); | |
| CommandInstance* FindCommand(const std::string& id); | |
| void AddCommandAddedCallback(const CommandQueue::CommandCallback& callback); | |
| void AddCommandRemovedCallback(const CommandQueue::CommandCallback& callback); | |
| void AddCommandHandler(const std::string& command_name, | |
| const Device::CommandHandlerCallback& callback); | |
| // Sets callback which is called when command definitions is changed. | |
| void AddCommandDefChanged(const base::Closure& callback); | |
| // Returns the command definitions for the device. | |
| const CommandDictionary& GetCommandDictionary() const; | |
| // Same as the overload above, but takes a path to a json file to read | |
| // the base command definitions from. | |
| bool LoadStandardCommands(const std::string& json, ErrorPtr* error); | |
| // Loads device command schema. | |
| bool LoadCommands(const base::DictionaryValue& dict, | |
| ErrorPtr* error); | |
| // Same as the overload above, but takes a path to a json file to read | |
| // the base command definitions from. | |
| bool LoadCommands(const std::string& json, | |
| ErrorPtr* error); | |
| // Adds a new command to the command queue. | |
| void AddCommand(std::unique_ptr<CommandInstance> command_instance); | |
| // Changes the visibility of commands. | |
| bool SetCommandVisibility(const std::vector<std::string>& command_names, | |
| CommandDefinition::Visibility visibility, | |
| ErrorPtr* error); | |
| bool AddCommand(const base::DictionaryValue& command, | |
| UserRole role, | |
| std::string* id, | |
| ErrorPtr* error); | |
| private: | |
| CommandDictionary dictionary_; // Registered definitions. | |
| CommandQueue command_queue_; | |
| std::vector<base::Callback<void()>> on_command_changed_; | |
| uint32_t next_command_id_{0}; | |
| DISALLOW_COPY_AND_ASSIGN(CommandManager); | |
| }; | |
| } // namespace weave | |
| #endif // LIBWEAVE_SRC_COMMANDS_COMMAND_MANAGER_H_ |