| # Elements | |
| Reviewed on: 2020-02-04 | |
| This directory contains an example implementation of a session that instantiates a single [element proposer](./element_proposer/README.md). | |
| The element proposer connects to the [`ElementManager`](//sdk/fidl/fuchsia.session/element_manager.fidl) service offered by the session, and uses that service to add a [`simple_element`](./simple_element/README.md) to the session. | |
| The `simple_element` then connects to the `ElementPing` service exposed to it by the session notifies the session that it has been successfully instantiated. | |
| ## Element Session | |
| The element session is configured to: | |
| 1. Declare a static child: the [`element_proposer`](./element_proposer/README.md). | |
| 2. Declare a child collection with a name which matches the one passed to the `ElementManagement` library. | |
| 3. Expose the `ElementManager` service. | |
| 4. Expose the `ElementPing` service. | |
| 5. Offer the `ElementManager` service to the `element_proposer` child. | |
| 6. Offer the `ElementPing` service to the child collection mentioned above. | |
| Details of how this is done can be found in the [`element_session.cml`](./element_session/meta/element_session.cml) file. | |
| Once the session is launched, it exposes the aforementioned services and starts | |
| handling requests. | |
| ## Element Proposer | |
| The element proposer is configured to use the `ElementManager` service. Details of how this is done can be found in the [`element_proposer.cml`]() file. | |
| Once the element proposer is started it connects to the `ElementManager` service | |
| and attempts to add an element (`simple_element`) to the session. | |
| ## Simple Element | |
| The simple element is configured to use the `ElementPing` service. Details of how this is done can be found in the [`simple_element.cml`](./simple_element/meta/simple_element.cml) file. | |
| Once the simple element is started, it will call `ElementPing::Ping()`. The | |
| session receives the ping and log a confirmation. | |
| ## Building `element_session` | |
| The example sessions are included in the build when you include `//src/session` with your `fx set`: | |
| ``` | |
| fx set <PRODUCT>.<BOARD> --with-base=//src/session,//src/session/bin/session_manager:session_manager.config | |
| ``` | |
| To see a list of possible products, run: `fx list-products`. | |
| To see a list of possible boards, run: `fx list-boards`. | |
| ## Running `element_session` | |
| ### Boot into `element_session` | |
| To boot into `element_session`, edit the [session manager cml](//src/session/bin/session_manager/meta/session_manager.cml) file to set the element session's component url as the argument: | |
| ``` | |
| "args": [ "-s", "fuchsia-pkg://fuchsia.com/element_session#meta/element_session.cm" ], | |
| ``` | |
| and run | |
| ``` | |
| fx update | |
| ``` | |
| To build the relevant components and boot into the session, follow the | |
| instructions in [//src/session/README.md](//src/session/README.md). | |
| ### Launch `element_session` from Command Line | |
| To instruct a running `session_manager` to launch the session, run: | |
| ``` | |
| fx shell session_control -s fuchsia-pkg://fuchsia.com/element_session#meta/element_session.cm | |
| ``` | |
| The last command should output a message stating that the element's ping has | |
| been received. | |
| ## Testing | |
| Add `--with //src/session:tests` to your existing `fx set` command will include the `element_session` unit tests in the build. The resulting `fx set` looks like: | |
| ``` | |
| fx set <PRODUCT>.<BOARD> --with-base=//src/session,//src/session/bin/session_manager:session_manager.config --with //src/session:tests | |
| ``` | |
| To see a list of possible products, run: `fx list-products`. | |
| To see a list of possible boards, run: `fx list-boards`. | |
| The tests are available in the `element_session_tests`, `element_proposer_tests`, and `simple_element_tests` packages. | |
| ``` | |
| $ fx run-test element_session_tests | |
| $ fx run-test element_proposer_tests | |
| $ fx run-test simple_element_tests | |
| ``` | |
| ## Source Layout | |
| The entry point and session units tests are located in `src/main.rs`. |