Bus Publish/Subscribe Development Guide
Components work together by exchanging messages. A message bus, which is part of the framework, delivers these messages. When the framework starts, it instantiates a default global message bus. If not indicated otherwise, the default message bus links all Oids.
Publish
The primary way to publish messages on the bus is the publish
(or _publish
inside an Oid) method:
<reference>.publish(topic, message)
With the following arguments:
topic
- the topic of the messagemessage
- message body - a JSON object
<reference>
is an instance of a bus that can be achieved in several ways, as further described.
Subscribe
The primary way to subscribe to messages on the bus is the subscribe
(or _subscribe
inside an Oid) method:
<reference>.subscribe(topic, handler)
With the following arguments:
topic
- the topic of the messagehandler
- the function that will handle the message
Whenever the component receives a message of a given subscribed topic, it dispatches it to the handler function or method, with two parameters: topic and message.
Publishing a message by an Oid
An Oid publishes a message on the bus through the following statement:
this._publish(topic, message)
Every Oid inherits the _publish
method from the DCC Base, which in turn calls the publish
method from the bus.
Subscribing a message by an Oid
An Oid subscribes a message on the bus through the following statement:
this._subscribe(topic, handler)
Every Oid inherits the _subscribe
method from the Oid Base, which in turn calls the subscribe
method from the bus. If the handler is a method, we suggest the following format:
this._subscribe(topic, this.method.bind(this))
This binding technique assures that the instance of the object will follow the method when it is called.
Publishing/Subscribing messages outside an Oid
Any javascript code outside an Oid can publish or subscribe to messages on the bus through the following statements:
Bus.i.publish(topic, message)
Bus.i.subscribe(topic, handler)
Bus.i
represents a default instance of a message bus. It is a static attribute created with the class.