| // 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 "src/modular/bin/sessionmgr/session_ctl.h" |
| |
| #include <fuchsia/modular/cpp/fidl.h> |
| #include <lib/syslog/cpp/macros.h> |
| #include <lib/vfs/cpp/service.h> |
| |
| #include "src/modular/bin/sessionmgr/puppet_master/puppet_master_impl.h" |
| |
| namespace modular { |
| |
| // Directory layout: |
| // |
| // puppet_master - fuchsia::modular::PuppetMaster service |
| SessionCtl::SessionCtl(vfs::PseudoDir* dir, const std::string& entry_name, |
| PuppetMasterImpl* const puppet_master_impl) |
| : dir_(dir), entry_name_(entry_name), puppet_master_impl_(puppet_master_impl) { |
| auto ctl_dir = std::make_unique<vfs::PseudoDir>(); |
| ctl_dir->AddEntry( |
| fuchsia::modular::PuppetMaster::Name_, |
| std::make_unique<vfs::Service>([this](zx::channel channel, async_dispatcher_t*) { |
| fidl::InterfaceRequest<fuchsia::modular::PuppetMaster> request(std::move(channel)); |
| puppet_master_impl_->Connect(std::move(request)); |
| })); |
| |
| auto status = dir_->AddEntry(entry_name_, std::move(ctl_dir)); |
| FX_DCHECK(status == ZX_OK); |
| } |
| |
| SessionCtl::~SessionCtl() { |
| auto status = dir_->RemoveEntry(entry_name_); |
| FX_DCHECK(status == ZX_OK); |
| } |
| |
| } // namespace modular |