|  | // Copyright 2014 The Chromium OS Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | #include "buffet/commands/dbus_command_dispatcher.h" | 
|  |  | 
|  | #include <chromeos/dbus/exported_object_manager.h> | 
|  |  | 
|  | #include "buffet/commands/command_instance.h" | 
|  |  | 
|  | using chromeos::dbus_utils::AsyncEventSequencer; | 
|  | using chromeos::dbus_utils::ExportedObjectManager; | 
|  |  | 
|  | namespace buffet { | 
|  |  | 
|  | DBusCommandDispacher::DBusCommandDispacher( | 
|  | const scoped_refptr<dbus::Bus>& bus, | 
|  | ExportedObjectManager* object_manager) | 
|  | : bus_(bus) { | 
|  | if (object_manager) | 
|  | object_manager_ = object_manager->AsWeakPtr(); | 
|  | } | 
|  |  | 
|  | void DBusCommandDispacher::OnCommandAdded(CommandInstance* command_instance) { | 
|  | auto proxy = CreateDBusCommandProxy(command_instance); | 
|  | proxy->RegisterAsync(AsyncEventSequencer::GetDefaultCompletionAction()); | 
|  | command_instance->SetProxy(proxy.get()); | 
|  |  | 
|  | auto pair = std::make_pair(command_instance, std::move(proxy)); | 
|  | CHECK(command_map_.insert(std::move(pair)).second) | 
|  | << "The command instance is already in the dispatcher command map"; | 
|  | } | 
|  |  | 
|  | void DBusCommandDispacher::OnCommandRemoved(CommandInstance* command_instance) { | 
|  | command_instance->SetProxy(nullptr); | 
|  | CHECK_GT(command_map_.erase(command_instance), 0u) | 
|  | << "The command instance is not in the dispatcher command map"; | 
|  | } | 
|  |  | 
|  | DBusCommandProxy* DBusCommandDispacher::FindProxy( | 
|  | CommandInstance* command_instance) const { | 
|  | auto p = command_map_.find(command_instance); | 
|  | return p != command_map_.end() ? p->second.get() : nullptr; | 
|  | } | 
|  |  | 
|  | std::unique_ptr<DBusCommandProxy> DBusCommandDispacher::CreateDBusCommandProxy( | 
|  | CommandInstance* command_instance) const { | 
|  | return std::unique_ptr<DBusCommandProxy>( | 
|  | new DBusCommandProxy(object_manager_.get(), bus_, command_instance)); | 
|  | } | 
|  |  | 
|  | }  // namespace buffet |