| // 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.ledger; |
| 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] |
| interface ComponentContext { |
| // Gets the Ledger associated with this component. This ledger instance is |
| // unique to this component (nb. not the component instance) under this user. |
| 1: GetLedger(request<fuchsia.ledger.Ledger> request); |
| |
| // Used to start an agent in the user scope if it isn't already running, and |
| // connect to it. |
| 2: ConnectToAgent(string url, |
| request<fuchsia.sys.ServiceProvider> incoming_services, |
| request<AgentController> controller); |
| |
| // Used to create or delete a message queue or retrieve an existing queue |
| // identified by |name|. |name| is local to the calling component instance. |
| 3: ObtainMessageQueue(string name, request<MessageQueue> queue); |
| 4: DeleteMessageQueue(string name); |
| |
| // Gets a MessageSender service that can be used to send a message to a queue |
| // identified by |queue_token|. Token for a MessageQueue is obtained from its |
| // GetToken() method. The token is unique within the scope of the user, i.e. |
| // it can be used by other component instances than the one that created the |
| // message queue. |
| 5: GetMessageSender(string queue_token, request<MessageSender> sender); |
| |
| // Gets the EntityResolver service, which can be used to resolve an entity |
| // reference to an Entity interface. |
| 6: GetEntityResolver(request<EntityResolver> request); |
| |
| // Creates a new entity from |type_to_data| such that duplicate types are |
| // overriden by subsequent entries. |
| // |
| // This is a useful way to represent small immutable entities without having |
| // to provide the entity using an Agent. The types and data together must be |
| // within 16KB in size. |
| 7: CreateEntityWithData(vector<TypeToDataEntry> type_to_data) |
| -> (string? entity_reference); |
| |
| // Gets the package name of this component. |
| // |
| // TODO(vardhan): MI4-939. This information should likely be exposed by a |
| // lower level (component-level, or application level). This information is |
| // most meant for a component to identify itself automatically when publishing |
| // metrics. |
| 8: GetPackageName() -> (string package_name); |
| }; |
| |
| // Used by ComponentContext.CreateEntityWithData(). |
| struct TypeToDataEntry { |
| string type; |
| string data; |
| }; |