update_engine: Switch to use Binder interface to weaved
Now that weaved provides a binder interface for its IPC, switch
to using it instead.
Bug: 23782171
Change-Id: I0b981b366a7dc42aabc9b61c4e9f90e26a2d74b4
diff --git a/weave_service.cc b/weave_service.cc
index 367359a..5825324 100644
--- a/weave_service.cc
+++ b/weave_service.cc
@@ -20,8 +20,8 @@
#include <string>
#include <base/bind.h>
-#include <base/values.h>
#include <brillo/errors/error.h>
+#include <brillo/message_loops/message_loop.h>
#include "update_engine/update_status_utils.h"
@@ -35,26 +35,37 @@
namespace chromeos_update_engine {
-bool WeaveService::Init(scoped_refptr<dbus::Bus> bus,
- DelegateInterface* delegate) {
+bool WeaveService::Init(DelegateInterface* delegate) {
delegate_ = delegate;
- device_ = weaved::Device::CreateInstance(
- bus, base::Bind(&WeaveService::UpdateWeaveState, base::Unretained(this)));
- device_->AddComponent(kWeaveComponent, {"_updater"});
- device_->AddCommandHandler(
- kWeaveComponent,
- "_updater.checkForUpdates",
- base::Bind(&WeaveService::OnCheckForUpdates, base::Unretained(this)));
- device_->AddCommandHandler(
- kWeaveComponent,
- "_updater.trackChannel",
- base::Bind(&WeaveService::OnTrackChannel, base::Unretained(this)));
-
+ weave_service_subscription_ = weaved::Service::Connect(
+ brillo::MessageLoop::current(),
+ base::Bind(&WeaveService::OnWeaveServiceConnected,
+ base::Unretained(this)));
return true;
}
+void WeaveService::OnWeaveServiceConnected(
+ const std::weak_ptr<weaved::Service>& service) {
+ weave_service_ = service;
+ auto weave_service = weave_service_.lock();
+ if (!weave_service)
+ return;
+
+ weave_service->AddComponent(kWeaveComponent, {"_updater"}, nullptr);
+ weave_service->AddCommandHandler(
+ kWeaveComponent,
+ "_updater.checkForUpdates",
+ base::Bind(&WeaveService::OnCheckForUpdates, base::Unretained(this)));
+ weave_service->AddCommandHandler(
+ kWeaveComponent,
+ "_updater.trackChannel",
+ base::Bind(&WeaveService::OnTrackChannel, base::Unretained(this)));
+ UpdateWeaveState();
+}
+
void WeaveService::UpdateWeaveState() {
- if (!device_ || !delegate_)
+ auto weave_service = weave_service_.lock();
+ if (!weave_service || !delegate_)
return;
int64_t last_checked_time;
@@ -83,17 +94,12 @@
static_cast<double>(last_checked_time)},
};
- if (!device_->SetStateProperties(kWeaveComponent, state, nullptr)) {
+ if (!weave_service->SetStateProperties(kWeaveComponent, state, nullptr)) {
LOG(ERROR) << "Failed to update _updater state.";
}
}
-void WeaveService::OnCheckForUpdates(
- const std::weak_ptr<weaved::Command>& cmd) {
- auto command = cmd.lock();
- if (!command)
- return;
-
+void WeaveService::OnCheckForUpdates(std::unique_ptr<weaved::Command> command) {
brillo::ErrorPtr error;
if (!delegate_->OnCheckForUpdates(&error)) {
command->Abort(error->GetCode(), error->GetMessage(), nullptr);
@@ -102,11 +108,7 @@
command->Complete({}, nullptr);
}
-void WeaveService::OnTrackChannel(const std::weak_ptr<weaved::Command>& cmd) {
- auto command = cmd.lock();
- if (!command)
- return;
-
+void WeaveService::OnTrackChannel(std::unique_ptr<weaved::Command> command) {
string channel = command->GetParameter<string>("channel");
brillo::ErrorPtr error;
if (!delegate_->OnTrackChannel(channel, &error)) {