đ¨Messages
Objects exchange messages with each other. When something happens, an Object sends a message to everyone who is listening. If an Object receives such message, it interprets the content and adjust itself if finds the message relevant.
Three Languages To Write Messages In
Messages are packages of data that can be expressed in one of three languages.
The language of implementation is JSON, while both YAML and Speech are parsed and transpiled to JSON during processing. Below are examples of the same messages for each of the languages.
JSON for Backend Implementation
Examples:
YAML for Readability
Speech for In-App Voice
Messages Content
As mentioned above, messages are used by Objects for two purposes:
Inform other Objects of how their state changes or of what is happening to them.
Control other Objects by changing their state or by make something happen to them.
With this approach, every message describes either a state change or an occurred event.
It has 1) type and 2) content, which is represented as dictionary of other messages.
Here is a simple example from the table above.
That is equivalent for:
Message of type media
containing:
a message of type
folder
with text content
"Presentation"
a message of type
page
with numerical content
10
Typed Messages and Interpretation
We introduce types of messages to help Objects with interpretation. Types relate to the nature of what is happening with the Object, thus most of the types are domain specific.
Knowing a type of a message, its receiver can decide if the message relevant or not. Then the receiver might use the domain knowledge to interpret the message and act it out.
For example, when a Loudspeaker gets a state on
message, the interpretation is to start playing.
However, Objects donât do any interpretation by themselves. Interpretation is done by Behaviors attached to them.
Message Types
We provide a set of basic types to create a baseline for standardisation and improve on interoperability. However, the developers of both Artifacts and Behaviours can easily extend the vocabulary by sending messages of their own types.
Below is the basic dictionary of message types and how they are used by different Objects.
flow
next prev first last play pause
Slide Screen, Photo Frame, etc.
state
on off reset
Microphone
Timer
folder
<text>
Text Screen
media
<folder> <number> <text>
Slide Screen, Photo Frame, etc.
page
<number>
Slide Screen, Photo Frame, etc.
time
<number> <number> <number> <number>:<number>
Timer
prop
<text>
(All Artifacts)
position rotation scale
<number> <number> <number> (and variants)
(All Artifacts)
channel
<number> <text>
(All Artifacts)*
plane
<text>
(All Artifacts)*
artifact
<text> [<property> ...]
Place*
Message Filtering
When an Object issues a message, it can provide also an optional filter to signify that this message is dedicated only to a certain subset of Other objects (from the sets of listeners and of controlled Objects).
This filter is also expressed as a message of a corresponding type filter
. Below are expected parameters for this message.
Speech Language
Speech is a domain-specific language developed to be used predominantly by human people when they need to control certain objects. They can do it by sending messages via one of the interfaces provided by the platform.
We see two interfaces for the Speech:
In-app Speech-To-Text (STT) interface via special Artifacts which support STT and can pass messages further to other objects which they control or to ones which are listening.
Place Console text interface exposed in the Web Portal.
Speech Language Design
The interfaces for Speech define the design of the Speech:
Speech aims to be as close to natural spoken language as possible.
Speech doesnât use special characters like
^
,*
,{}
,,
etc.Quotes and punctuation are optional.
Units (e.g.
feet
,minutes
) and prepositions (e.g.to
,from
) are optional.Message types (e.g.
time
,flow
) are optional.
As a result, Speech has a basic preprocessor that cast types and units when they are needed to disambiguate.
Speech Syntax
Speech syntax is pretty much Lisp-like, making brackets optional as design dictates.
Lisp:
(time 20:10)
,Speech:
time 20:10
Lisp:
(media (folder "Presentation") 10)
,Speech
media folder "Presentation" 10
Last updated