.. _coordination:
Component Coordination
======================
.. _TaskState: http://docs.cor-lab.de//rst-manual/trunk/html/generated/stable/package-rst-communicationpatterns.html#rst.communicationpatterns.TaskState
.. _ResourceAllocation: http://docs.cor-lab.de//rst-manual/trunk/html/generated/sandbox/package-rst-communicationpatterns.html#rst.communicationpatterns.ResourceAllocation
.. _Ini files: https://en.wikipedia.org/wiki/INI_file#Format
While in the apartment's architecture every component can trigger each other component,
there is also the possibility to exhibit behaviors in a cooridnated matter. For that purpose,
there are a number of coordination services.
All of these services allow for exclusive access to interactive functionality by using the
:ref:`allocation` that is able to assign resources to components sequentially based on priorities.
Furthermore, all coordination components can be triggered via the listener/informer mechanism.
Thereby, they are able to monitor the request and report it back to the component that triggered it
by following the `TaskState`_ communication pattern (cf. :ref:`tasks`). In particular, only `TaskState`_
objects are regarded as valid input. Additionally, requesters are informed about the scenario's
status also on that scope with `TaskState`_ objects that use the initial request's event id as a
cause id. As an alternative trigger, there is a :ref:`buttons` inside the apartment that can be used to
initiate scenes, scenarios, or tasks.
There are three different coordination services that provide interfaces to apartment functions on separate interactive levels:
================ ==============
Service Description
================ ==============
:ref:`scenes` (static) configurations of the apartment's infrastructure
:ref:`scenarios` interactive routines with a certain extent
:ref:`tasks` (simple) short-lived services or (other component's) functions
================ ==============
`Ini files`_ are used to configure these three main coordination services :ref:`scenes`, :ref:`scenarios`,
and :ref:`tasks`. They specify which resources they occupy at the :ref:`resources` and how they communicate
with other components inside the apartment. See each component's documentation for a list of allowed values.
Shared repository for coordination components (except :ref:`allocation`):
- web: `scenario-coordination-cfg `_
- ``git clone https://projects.cit-ec.uni-bielefeld.de/git/lsp-csra.scenario-coordination-cfg.git/``
System startup:
- web: `system-startup `_
- ``git clone https://projects.cit-ec.uni-bielefeld.de/git/lsp-csra.system-startup.git/``
- All coordination components can be found in ``lsp-csra-base.sh`` on the ``coordination`` tab:
- ``component_allocation-service``
- ``component_scenario-service``
- ``component_scene-service``
- ``component_task-service``
- ``component_button-service``
.. toctree::
:caption: Coordination-related components
:maxdepth: 2
coordination/resources
coordination/scenes
coordination/scenarios
coordination/tasks
coordination/buttons