| // Copyright 2018 The Fuchsia 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 "peridot/bin/sessionmgr/puppet_master/puppet_master_impl.h" |
| |
| #include <lib/fxl/functional/make_copyable.h> |
| #include <lib/fxl/logging.h> |
| |
| #include "peridot/bin/sessionmgr/puppet_master/story_puppet_master_impl.h" |
| #include "peridot/bin/sessionmgr/storage/session_storage.h" |
| |
| namespace modular { |
| |
| PuppetMasterImpl::PuppetMasterImpl(SessionStorage* const session_storage, |
| StoryCommandExecutor* const executor) |
| : session_storage_(session_storage), executor_(executor) { |
| FXL_DCHECK(session_storage_ != nullptr); |
| FXL_DCHECK(executor_ != nullptr); |
| } |
| |
| PuppetMasterImpl::~PuppetMasterImpl() = default; |
| |
| void PuppetMasterImpl::Connect( |
| fidl::InterfaceRequest<fuchsia::modular::PuppetMaster> request) { |
| bindings_.AddBinding(this, std::move(request)); |
| } |
| |
| void PuppetMasterImpl::ControlStory( |
| std::string story_name, |
| fidl::InterfaceRequest<fuchsia::modular::StoryPuppetMaster> request) { |
| auto controller = std::make_unique<StoryPuppetMasterImpl>( |
| story_name, &operations_, session_storage_, executor_); |
| story_puppet_masters_.AddBinding(std::move(controller), std::move(request)); |
| } |
| |
| void PuppetMasterImpl::DeleteStory(std::string story_name, |
| DeleteStoryCallback done) { |
| session_storage_->DeleteStory(story_name)->Then(std::move(done)); |
| } |
| |
| void PuppetMasterImpl::GetStories(GetStoriesCallback done) { |
| session_storage_->GetAllStoryData()->Then( |
| [done = std::move(done)]( |
| std::vector<fuchsia::modular::internal::StoryData> |
| all_story_data) { |
| std::vector<std::string> result; |
| for (auto& story : all_story_data) { |
| result.push_back(std::move(story.story_info.id)); |
| } |
| |
| done(std::move(result)); |
| }); |
| } |
| |
| } // namespace modular |