blob: fd69e30bae7d1fc0731b2bceaa774f2a0e49549c [file] [log] [blame]
// 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