blob: f55ce7d2db40c8a49800776415814ad4a886f4c1 [file] [log] [blame]
// Copyright 2019 The Chromium 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 "fuchsia/base/agent_manager.h"
#include <utility>
#include "base/fuchsia/fuchsia_logging.h"
#include "base/logging.h"
namespace cr_fuchsia {
AgentManager::AgentManager(const sys::ServiceDirectory* incoming)
: component_context_(
incoming->Connect<fuchsia::modular::ComponentContext>()) {}
AgentManager::~AgentManager() = default;
void AgentManager::ConnectToAgentServiceUnsafe(base::StringPiece agent,
base::StringPiece interface,
zx::channel request) {
auto it = agents_.find(agent);
if (it == agents_.end()) {
it = agents_.emplace(agent.as_string(), AgentConnection()).first;
component_context_->ConnectToAgent(agent.as_string(),
it->second.services.NewRequest(),
it->second.controller.NewRequest());
it->second.services.set_error_handler(
[this, agent = agent.as_string()](zx_status_t status) {
ZX_LOG(WARNING, status) << "Agent disconnected: " << agent;
agents_.erase(agent);
});
}
it->second.services->ConnectToService(interface.as_string(),
std::move(request));
}
AgentManager::AgentConnection::AgentConnection() = default;
AgentManager::AgentConnection::AgentConnection(AgentConnection&& other) =
default;
AgentManager::AgentConnection& AgentManager::AgentConnection::operator=(
AgentConnection&& other) = default;
AgentManager::AgentConnection::~AgentConnection() = default;
} // namespace cr_fuchsia