blob: 39e106bd0a1ff081d81852d61718f0bf56d0d8e6 [file] [log] [blame]
Alex Vakulenko95110752014-09-03 16:27:21 -07001// Copyright 2014 The Chromium OS Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
Vitaly Bukaf9d50292015-07-27 16:08:51 -07005#include "buffet/dbus_command_dispatcher.h"
Alex Vakulenko95110752014-09-03 16:27:21 -07006
7#include <chromeos/dbus/exported_object_manager.h>
8
Vitaly Bukaf9d50292015-07-27 16:08:51 -07009#include "buffet/dbus_command_proxy.h"
Alex Vakulenko420e49f2014-12-01 17:53:27 -080010#include "buffet/dbus_constants.h"
Vitaly Buka12affd82015-07-23 18:45:35 -070011#include "weave/command.h"
Alex Vakulenko95110752014-09-03 16:27:21 -070012
13using chromeos::dbus_utils::AsyncEventSequencer;
14using chromeos::dbus_utils::ExportedObjectManager;
15
Vitaly Bukaf9d50292015-07-27 16:08:51 -070016namespace buffet {
Alex Vakulenko95110752014-09-03 16:27:21 -070017
18DBusCommandDispacher::DBusCommandDispacher(
Vitaly Buka12affd82015-07-23 18:45:35 -070019 const base::WeakPtr<ExportedObjectManager>& object_manager,
Vitaly Bukaf9d50292015-07-27 16:08:51 -070020 weave::Commands* command_manager)
Vitaly Bukaae0f3a12015-05-11 16:27:30 -070021 : object_manager_{object_manager} {
Vitaly Buka12affd82015-07-23 18:45:35 -070022 command_manager->AddOnCommandAddedCallback(base::Bind(
23 &DBusCommandDispacher::OnCommandAdded, weak_ptr_factory_.GetWeakPtr()));
Alex Vakulenko95110752014-09-03 16:27:21 -070024}
25
Vitaly Bukaf9d50292015-07-27 16:08:51 -070026void DBusCommandDispacher::OnCommandAdded(weave::Command* command) {
Vitaly Bukaae0f3a12015-05-11 16:27:30 -070027 if (!object_manager_)
28 return;
29 std::unique_ptr<DBusCommandProxy> proxy{new DBusCommandProxy(
Vitaly Buka12affd82015-07-23 18:45:35 -070030 object_manager_.get(), object_manager_->GetBus(), command,
Vitaly Bukab6f015a2015-07-09 14:59:23 -070031 buffet::kCommandServicePathPrefix + std::to_string(++next_id_))};
Alex Vakulenko95110752014-09-03 16:27:21 -070032 proxy->RegisterAsync(AsyncEventSequencer::GetDefaultCompletionAction());
Vitaly Buka12affd82015-07-23 18:45:35 -070033 command->AddObserver(proxy.release());
Alex Vakulenko95110752014-09-03 16:27:21 -070034}
35
Vitaly Bukaf9d50292015-07-27 16:08:51 -070036} // namespace buffet