blob: 22c4c3df437dc0fd116d5cca32c44bef595f83d1 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
// 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_->DeprecatedConnectToAgent(
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
|