examples/ubuntu: add simple command handler example Bug: 24307362 Change-Id: Ia76f7eb261b78772a116caf5b9e4f05fc7e4c970 Reviewed-on: https://weave-review.googlesource.com/1120 Reviewed-by: Vitaly Buka <vitalybuka@google.com>
diff --git a/libweave/examples/ubuntu/main.cc b/libweave/examples/ubuntu/main.cc index c6450b4..a9eee98 100644 --- a/libweave/examples/ubuntu/main.cc +++ b/libweave/examples/ubuntu/main.cc
@@ -2,6 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#include <base/bind.h> +#include <base/values.h> #include <weave/device.h> #include "libweave/examples/ubuntu/avahi_client.h" @@ -19,8 +21,30 @@ << "\t-h,--help Show this help message\n" << "\t-b,--bootstrapping Force WiFi bootstrapping\n"; } + +class CommandHandler { + public: + explicit CommandHandler(weave::Device* device) { + device->GetCommands()->AddOnCommandAddedCallback( + base::Bind(&CommandHandler::OnNewCommand, weak_ptr_factory_.GetWeakPtr())); + } + + private: + void OnNewCommand(weave::Command* cmd) { + LOG(INFO) << "received command: " << cmd->GetName(); + if (cmd->GetName() == "base.identify") { + cmd->SetProgress(base::DictionaryValue{}, nullptr); + LOG(INFO) << "base.identify command: completed"; + cmd->Done(); + } else { + LOG(INFO) << "unimplemented command: ignored"; + } + } + base::WeakPtrFactory<CommandHandler> weak_ptr_factory_{this}; +}; } + int main(int argc, char** argv) { bool force_bootstrapping = false; for (int i = 1; i < argc; ++i) { @@ -52,6 +76,7 @@ &http_server, weave::examples::NetworkImpl::HasWifiCapability() ? &network : nullptr, &bluetooth); + CommandHandler handler(device.get()); task_runner.Run();