Selected DCCs

Trigger DCC (<dcc-trigger>)

A visual element that triggers an action. Its standard shape is a button, but it can be also an image or an element customized by the author.

Syntax

<dcc-trigger id="id"
             label="label"
             image="image"
             action="action"
             divert="divert"
             value="value">
</dcc-trigger>
  • id - unique id of the trigger;
  • label:
    • textual button - textual label showed in the button;
    • image trigger - the title of the image;
  • image (optional) - when the trigger is an image, it is the path of the image file;
  • action (optional) - the topic of the message sent by the trigger to activate an action; when the action is not specified, the topic is built from the label (“trigger/
  • divert (optional) - how the trigger diverts the course of action: forward, round, or enclosed;
  • value (optional) - the message body the accompanies the topic.

Examples

Textual button trigger that sends the following message when clicked:

  • topic - button/on/clicked
  • message body - "message to you"
<dcc-trigger label="On"
             action="button/on/clicked"
             value="message to you">
</dcc-trigger>

Slider DCC (<dcc-slider>)

An input component presented as a slider.

Syntax

<dcc-slider id="id"
            statement="statement"
            variable="variable"
            value="current value"
            mandatory
            min="minimal value"
            max="maximal value"
            index>
</dcc-slider>
  • id - unique id of the slider;
  • statement - statement presented before the slider;
  • variable - name of the variable related to the input value;
  • value - current value of the slider;
  • mandatory - defines if the user must select some value - i.e., the slide must be moved;
  • min - minimal value accepted;
  • max - maximal value accepted;
  • index - defines if the index is presented besides the slider.

Examples

A simple example:

<dcc-slider variable="age" value="1" min="1" max="130" index>Select your age:</dcc-slider>

Lively Talk DCC (<dcc-lively-talk>)

An animated image that also displays a text inside a ballon. Usually adopted for animated dialogs.

Syntax

<dcc-lively-talk duration="duration" 
                 delay="delay"
                 direction="direction"
                 character="character"
                 speech="speech">
</dcc-lively-talk>
  • duration - duration of the animation (duration=0 means a static image);
  • delay - delay before the animation is started;
  • direction - direction of the animation (left (default) or right);
  • character - character that appears in the image;
  • speech - text of the speech.

When a Lively Talk DCC receives a message, it shows the body of the message as a speech in the ballon.

Examples

Available characters in the playground: nurse, doctor, and patient.

A static patient showing the speech “Please, help me!”

<dcc-lively-talk duration="0"
                 character="patient"
                 speech="Please, help me!">
</dcc-lively-talk>

An animated nurse that enters in 2 seconds and shows the speech “Doctor, please you have to evaluate a man!”

<dcc-lively-talk duration="2s"
                 character="nurse"
                 speech="Doctor, please you have to evaluate a man!">
</dcc-lively-talk>

An animated doctor that enters in 2 seconds after waiting 2 seconds and shows the speech “Ok, I’m on my way.” The doctor’s animation goes in the right direction.

<dcc-lively-talk duration="2s"
                 delay="2s"
                 direction="right"
                 character="doctor"
                 speech="Ok, I'm on my way.">
</dcc-lively-talk>

RSS DCC <dcc-rss>

Fetches items from an RSS feed and publishes them as messages on the bus.

The attribute source specifies the address of the source of the feed. When a start is triggered, the component reads the feed and deploys the messages.

  • source - the source of the RSS feeds;
  • publish - the topic to be published in the message (default is dcc/rss/post);
  • interval - the interval between the publication of the messages in milliseconds (default is 1000).

Roles of notifications: start - starts a cyclical process of publishing one item per interval; step - publishes one RSS item (the next in a sequence); stop - stops the cyclical process.

<dcc-trigger label="News" action="next/rss">
</dcc-trigger>

<dcc-rss source="https://www.wired.com/category/science/feed" publish="rss/science">
  <subscribe-dcc topic="next/rss" role="step"></subscribe-dcc>
</dcc-rss>
<dcc-trigger label="Next Item" action="next/rss">
</dcc-trigger>

<dcc-rss source="https://www.wired.com/category/science/feed">
  <subscribe-dcc topic="next/rss" role="step"></subscribe-dcc>
</dcc-rss>

<dcc-lively-talk id="doctor"
                 duration="0s"
                 character="doctor"
                 speech="News ">
  <subscribe-dcc topic="dcc/rss/post"></subscribe-dcc>
</dcc-lively-talk>

Aggregator DCC (<dcc-aggregator>)

Aggregates items of messages, as RSS messages.

  • publish - the topic to be published in the message (default is dcc/rss/post);

  • quantity - the quantity of messages in the aggregation.

<dcc-trigger label="Next Item" action="next/rss">
</dcc-trigger>

<dcc-rss publish="rss/science" source="https://www.wired.com/category/science/feed">
  <subscribe-dcc topic="next/rss" role="step"></subscribe-dcc>
</dcc-rss>

<dcc-aggregator publish="aggregate/science" quantity="3">
  <subscribe-dcc topic="rss/science"></subscribe-dcc>
</dcc-aggregator>

<dcc-lively-talk id="doctor"
                 duration="0s"
                 character="doctor"
                 speech="News ">
  <subscribe-dcc topic="rss/science"></subscribe-dcc>
</dcc-lively-talk>

<dcc-lively-talk id="doctor"
                 duration="0s"
                 character="patient"
                 speech="News ">
  <subscribe-dcc topic="aggregate/science"></subscribe-dcc>
</dcc-lively-talk>

Subscribe

Subscribing Messages and Connecting Components (<subscribe-dcc>)

A DCC can subscribe to message in such a way that whenever the message appears on the bus, it will receive it.

For each subscribed message a DCC declares a <subscribe-dcc> inside its element. With the following syntax:

<subscribe-dcc topic="message"></subscribe-dcc>
  • message - specifies the subscribed message

The following example shows the message I am a doctor. when the button with the label Talk is triggered.

<dcc-trigger label="Talk" action="send/message" value="I am a doctor.">
</dcc-trigger>

<dcc-lively-talk id="doctor"
                 duration="0s"
                 character="doctor"
                 speech="Hello, ">
  <subscribe-dcc topic="send/message"></subscribe-dcc>
</dcc-lively-talk>

The following example shows a character that tells you “Hello your name” when you type your name.

<dcc-input-typed variable="name">Type your name:</dcc-input-typed>

<dcc-lively-talk id="doctor"
                 duration="0s"
                 character="doctor"
                 speech="Hello ">
  <subscribe-dcc topic="var/name/changed"></subscribe-dcc>
</dcc-lively-talk>

Or how a character tells you “Your age is your age” when you define your age in the slider.

<dcc-slider variable="age" min="1" max="130" index>
Select your age:
</dcc-slider>

<dcc-lively-talk character="doctor"
                 speech="Your age is  ">
  <subscribe-dcc topic="var/age/changed"></subscribe-dcc>
</dcc-lively-talk>

Publish/Subscribe

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.

The following example show messages selectively displayed.

<dcc-trigger label="Disease"
             action="news/disease"
             value="new disease">
</dcc-trigger>

<dcc-trigger label="Medication"
             action="news/medication"
             value="new medication">
</dcc-trigger>

<dcc-lively-talk duration="0s"
                 character="doctor"
                 speech="I heard about a ">
  <subscribe-dcc topic="news/#"></subscribe-dcc>
</dcc-lively-talk>

<dcc-lively-talk duration="0s"
                 character="nurse"
                 speech="I heard about a ">
  <subscribe-dcc topic="news/disease"></subscribe-dcc>
</dcc-lively-talk>

<dcc-lively-talk duration="0s"
                 character="patient"
                 speech="I heard about a ">
  <subscribe-dcc topic="news/soccer"></subscribe-dcc>
</dcc-lively-talk>