| // 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. |
| |
| library fuchsia.modular; |
| |
| using fuchsia.sys; |
| |
| /// Provided to all component instances in their respective initialization |
| /// information by the framework. For example, a Module gets it from its |
| /// ModuleContext and an Agent gets it from its AgentContext. |
| [Discoverable] |
| protocol ComponentContext { |
| /// DEPRECATED: use the component's incoming namespace (for C++, see sys.ComponentContext) |
| /// to connect to services provided by agents. See |
| /// /docs/concepts/modular/guide/how_to_write_an_agent_cc.md for an example. |
| /// |
| /// Used to start an agent in the user scope if it isn't already running, and |
| /// connect to it. |
| ConnectToAgent(string url, |
| request<fuchsia.sys.ServiceProvider> incoming_services, |
| request<AgentController> controller); |
| [Transitional] |
| DeprecatedConnectToAgent(string url, |
| request<fuchsia.sys.ServiceProvider> incoming_services, |
| request<AgentController> controller); |
| |
| /// DEPRECATED: use the component's incoming namespace (for C++, see sys.ComponentContext) |
| /// to connect to services provided by agents. See |
| /// /docs/concepts/modular/guide/how_to_write_an_agent_cc.md for an example. |
| /// |
| /// Connects to an agent that provides the given `request.service_name`, and |
| /// then connects the given `request.channel` to that service. |
| /// `request.agent_controller` must be kept alive until the service is no |
| /// longer required. |
| /// |
| /// If an error is encountered, the `request.channel` will be closed with |
| /// a status code, such as: |
| /// * `ZX_ERR_NOT_FOUND` -- if a `request.handler` agent URL is not |
| /// specified, and an agent for the `request.service_name` is not found |
| /// * `ZX_ERR_PEER_CLOSED` -- if `request.service_name` is not available from |
| /// the agent (either specified or discovered) |
| [Transitional] |
| ConnectToAgentService(AgentServiceRequest request); |
| [Transitional] |
| DeprecatedConnectToAgentService(AgentServiceRequest request); |
| }; |
| |
| /// Used by ComponentContext.ConnectToAgentService |
| table AgentServiceRequest { |
| /// The name of the requested service. |
| 1: string service_name; |
| |
| /// The channel that will be used to communicate with the requested service. |
| 2: handle<channel> channel; |
| |
| /// The component URL of the Agent that is to provide the specified service. |
| /// If no handler is specified, the framework will perform resolution to |
| /// find an appropriate handler. |
| 3: fuchsia.sys.component_url handler; |
| |
| /// The AgentController that keeps the agent alive. |
| 4: request<AgentController> agent_controller; |
| }; |