Add vendor state into example
Change-Id: Ib373e8313bfacc4ade2ef2e924f433252fc5096e
Reviewed-on: https://weave-review.googlesource.com/1212
Reviewed-by: Vitaly Buka <vitalybuka@google.com>
diff --git a/libweave/examples/ubuntu/README b/libweave/examples/ubuntu/README
index 063d8f4..af67036 100644
--- a/libweave/examples/ubuntu/README
+++ b/libweave/examples/ubuntu/README
@@ -84,7 +84,8 @@
Enter request body:
{
"deviceId": "0f8a5ff5-1ef0-ec39-f9d8-66d1caeb9e3d",
- "name": "_greeter._greet"
+ "name": "_greeter._greet",
+ "parameters": { "_name": "cloud user" }
}
"Send the request", you command will be "queued" as its "state"
diff --git a/libweave/examples/ubuntu/file_config_store.cc b/libweave/examples/ubuntu/file_config_store.cc
index 8853bcf..66dd80f 100644
--- a/libweave/examples/ubuntu/file_config_store.cc
+++ b/libweave/examples/ubuntu/file_config_store.cc
@@ -17,6 +17,7 @@
const char kSettingsDir[] = "/var/lib/weave/";
const char kSettingsPath[] = "/var/lib/weave/weave_settings.json";
+const char kCategory[] = "example";
FileConfigStore::FileConfigStore(bool disable_security)
: disable_security_{disable_security} {}
@@ -60,7 +61,7 @@
}
std::map<std::string, std::string> FileConfigStore::LoadCommandDefs() {
- return {{"example", R"({
+ return {{kCategory, R"({
"base": {
"updateBaseConfiguration": {},
"identify": {},
@@ -77,11 +78,11 @@
}
std::map<std::string, std::string> FileConfigStore::LoadStateDefs() {
- return {};
+ return {{kCategory, R"({"_greeter": {"_greetings_counter":"integer"}})"}};
}
std::vector<std::string> FileConfigStore::LoadStateDefaults() {
- return {};
+ return {R"({"_greeter": {"_greetings_counter": 0}})"};
}
} // namespace examples
diff --git a/libweave/examples/ubuntu/main.cc b/libweave/examples/ubuntu/main.cc
index 85fbe3b..11c3fac 100644
--- a/libweave/examples/ubuntu/main.cc
+++ b/libweave/examples/ubuntu/main.cc
@@ -28,7 +28,7 @@
class CommandHandler {
public:
- explicit CommandHandler(weave::Device* device) {
+ explicit CommandHandler(weave::Device* device) : device_{device} {
device->GetCommands()->AddOnCommandAddedCallback(base::Bind(
&CommandHandler::OnNewCommand, weak_ptr_factory_.GetWeakPtr()));
}
@@ -38,22 +38,34 @@
LOG(INFO) << "received command: " << cmd->GetName();
if (cmd->GetName() == "_greeter._greet") {
std::string name;
- cmd->GetParameters()->GetString("_name", &name);
- if (name.empty()) {
- name = cmd->GetOrigin() == weave::CommandOrigin::kCloud ? "cloud user"
- : "local user";
- }
- LOG(INFO) << "vendor _greeter._greet command: in progress";
+ if (!cmd->GetParameters()->GetString("_name", &name))
+ name = "anonymous";
+
+ LOG(INFO) << cmd->GetName() << " command in progress";
cmd->SetProgress(base::DictionaryValue{}, nullptr);
+
base::DictionaryValue result;
result.SetString("_greeting", "Hello " + name);
cmd->SetResults(result, nullptr);
- LOG(INFO) << "vendor _greeter._greet command: finished";
+ LOG(INFO) << cmd->GetName() << " command finished: " << result;
+
+ base::DictionaryValue state;
+ state.SetIntegerWithoutPathExpansion("_greeter._greetings_counter",
+ ++counter_);
+ device_->GetState()->SetProperties(state, nullptr);
+
+ LOG(INFO) << "New state: "
+ << *device_->GetState()->GetStateValuesAsJson();
+
cmd->Done();
} else {
LOG(INFO) << "unimplemented command: ignored";
}
}
+
+ weave::Device* device_{nullptr};
+ int counter_{0};
+
base::WeakPtrFactory<CommandHandler> weak_ptr_factory_{this};
};
}