diff --git a/notebook/bus/README.md b/notebook/bus/README.md index 0540e45..1dd3966 100644 --- a/notebook/bus/README.md +++ b/notebook/bus/README.md @@ -1,11 +1,149 @@ +# Harena Message Protocol +## Topic Structure and Wildcards +The wildcards standard is based in the MQTT 3.1.1, as specified in the document: [MQTT Version 3.1.1](http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html), Section 4.7.1 Topic wildcards. + +Extra information is based on: +The HiveMQ Team. MQTT Essentials Part 5: MQTT Topics & Best Practices. February 9, 2015. online: https://www.hivemq.com/blog/mqtt-essentials-part-5-mqtt-topics-best-practices/. +## Topic Name Structure + +Whenever a message is published or subscribed a **Topic Name** is specified. It is a hierarchical structure composed by one or more **Topic Levels** separated by slashes `/` (the **Topic Level Separators**). + +* **Topic Level** - Is a label formed with alphanumeric characters, and can also have: white space, underscore and minus. + +## Best Practices +The following best practices have been adopted in the Harena project and must be followed by all developers. They are derived from [MQTT Essentials Part 5: MQTT Topics & Best Practices](https://www.hivemq.com/blog/mqtt-essentials-part-5-mqtt-topics-best-practices/). + +* **Never use a leading forward slash** - A Topic Name can optionally start and/or end by a slash `/`, but it adds an extra unnecessary level, therefore they are not adopted in Harena. + +* **Never use spaces in a topic** - Even though MQTT supports spaces, they are not used in Harena. + +## Topic Filters and Wildcards + +In the subscription process, it is possible to specify a specific Topic Name or a Topic Filter, which works as a regular expression representing a set of possible Topic Names. + +Wildcards are represented by the special `#` and/or `+` characters, appearing inside a Topic Name in the subscription process. They enable the subscription of a set of topics, since they generically represent one or more Topic Levels, according to the following rules: +### Multilevel Wildcard `#` +The wildcard `#` can be used only in two positions in the Topic Filter: +* alone (the filter is only a `#`) - matches any Topic Name with any number of levels; +* end of the Topic Name (always preceded by a `/ `) - matches any number of Topic Levels with the prefix specified before the wildcard. + +### Single Level Wildcard `+` +Only a single Topic Level can be matched by the wildcard `+`, which represents any possible complete Topic Level Label. The `+` wildcard can appear only in four positions: +* alone (the filter is only a `+`) - matches any Topic Label in a single level (without slashes); +* beginning of the Topic Filter, always followed by a slash; +* end of the Topic Filter, always preceded by a slash; +* middle of the Topic Filter, always between two slashes. # Message Paths in the Bus +## Control Actions + +General protocol: `control//`. + +Most of the control actions trigger the final action, for example, the `control/case/load` control action is the start of the process to trigger the `case//load` action. + +* `control/case/load` +* `control/case/selected` +* `control/case/save` +* `control/case/play` +* `control/knot/edit` +* `control/config/edit` + ## Persisted Messages All the internal paths are mapped to the external paths prefixing the path by: `/execution/`, where `` is the id of the case instance that is being executed. -### Entity: `dcc-input` -* `set ` \[`/dcc-input/set/`\] - Notifies the input of a value by the user related to a ``. +### Entity: `template_family` +* `template_family/*/get` - Returns the list of the available template families. + + response topic: `template_family/*` + message: {: } + +### Entity: `template` +* `template/.