blob: f5577de6da973e2043752baef0fd29205c64a734 [file] [log] [blame]
// Copyright 2017 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/cobalt/bin/app/logger_factory_impl.h"
#include "src/cobalt/bin/app/utils.h"
#include "src/lib/fsl/vmo/strings.h"
namespace cobalt {
using cobalt::TimerManager;
using cobalt::logger::ProjectContextFactory;
using config::ProjectConfigs;
using fuchsia::cobalt::Status;
constexpr uint32_t kFuchsiaCustomerId = 1;
LoggerFactoryImpl::LoggerFactoryImpl(
std::shared_ptr<cobalt::logger::ProjectContextFactory> global_project_context_factory,
TimerManager* timer_manager, CobaltServiceInterface* cobalt_service)
: global_project_context_factory_(std::move(global_project_context_factory)),
timer_manager_(timer_manager),
cobalt_service_(cobalt_service) {}
template <typename LoggerInterface>
void LoggerFactoryImpl::BindNewLogger(
std::unique_ptr<logger::ProjectContext> project_context,
fidl::InterfaceRequest<LoggerInterface> request,
fidl::BindingSet<LoggerInterface, std::unique_ptr<LoggerInterface>>* binding_set) {
binding_set->AddBinding(
std::make_unique<LoggerImpl>(cobalt_service_->NewLogger(std::move(project_context)),
timer_manager_),
std::move(request));
}
template <typename LoggerInterface, typename Callback>
void LoggerFactoryImpl::CreateAndBindLoggerFromProjectId(
uint32_t project_id, fidl::InterfaceRequest<LoggerInterface> request, Callback callback,
fidl::BindingSet<LoggerInterface, std::unique_ptr<LoggerInterface>>* binding_set) {
auto project_context =
global_project_context_factory_->NewProjectContext(kFuchsiaCustomerId, project_id);
if (!project_context) {
FX_LOGS(ERROR) << "The CobaltRegistry bundled with this release does not "
"include a Fuchsia project with ID "
<< project_id;
callback(Status::INVALID_ARGUMENTS);
return;
}
BindNewLogger(std::move(project_context), std::move(request), binding_set);
callback(Status::OK);
}
void LoggerFactoryImpl::CreateLoggerFromProjectId(
uint32_t project_id, fidl::InterfaceRequest<fuchsia::cobalt::Logger> request,
CreateLoggerFromProjectIdCallback callback) {
CreateAndBindLoggerFromProjectId(project_id, std::move(request), std::move(callback),
&logger_bindings_);
}
void LoggerFactoryImpl::CreateLoggerSimpleFromProjectId(
uint32_t project_id, fidl::InterfaceRequest<fuchsia::cobalt::LoggerSimple> request,
CreateLoggerSimpleFromProjectIdCallback callback) {
CreateAndBindLoggerFromProjectId(project_id, std::move(request), std::move(callback),
&logger_simple_bindings_);
}
} // namespace cobalt