This actor publishes input tokens on a named channel. The tokens are
"tunneled" to any instance of <a href="../../../ptolemy/actor/lib/Subscriber.xml">ptolemy.actor.lib.Subscriber</a> that names the same channel.
If <a href="../../../ptolemy/actor/lib/Publisher.xml#global">global</a> is false (the default), then this publisher
will only send to instances of Subscriber that are under the
control of the same director. That is, it can
be at a different level of the hierarchy, or in an entirely different
composite actor, as long as the relevant composite actors are
transparent (have no director). If <a href="../../../ptolemy/actor/lib/Publisher.xml#global">global</a> is true,
then the subscriber may be anywhere in the model, as long as its
<i>global</i> parameter is also true.
<p>
It is an error to have two instances of Publisher using the same
channel under the control of the same director. When you create a
new Publisher, by default, it has no channel name. You have to
specify a channel name to use it.
<p>
<b>How it works:</b>
This actor has a hidden output port. When the channel name
is specified, typically during model construction, this actor
causes a relation to be created in the least opaque composite
actor above it in the hierarchy and links to that relation.
In addition, if <a href="../../../ptolemy/actor/lib/Publisher.xml#global">global</a> is set to true, it causes
a port to be created in that composite, and also links that
port to the relation on the inside. The relation is recorded by the opaque
composite. When a Subscriber is preinitialized that refers
to the same channel, that Subscriber finds the relation (by
finding the least opaque composite actor above it) and links
to the relation. Some of these links are "liberal links" in that
they cross levels of the hierarchy.
<p>
Since publishers are linked to subscribers,
any data dependencies that the director might assume on a regular
"wired" connection will also be assumed across Publisher-Subscriber
pairs. Similarly, type constraints will propagate across
Publisher-Subscriber pairs. That is, the type of the Subscriber
output will match the type of the Publisher input.
Edward A. Lee, Raymond A. Cardillo, Bert Rodiers
$Id: Publisher.java 70398 2014-10-22 23:44:32Z cxh $
Ptolemy II 5.2
Green (cxh)
Red (cxh)
The input port. This is a multiport, allowing multiple
signals to be be transmitted through the publisher channel.
This base class imposes no type constraints except
that the type of the input cannot be greater than the type of the
output.
The output port. This port is hidden and should not be
directly used. By default, the type of this output is constrained
to be at least that of the input. This port is hidden by default
and the actor handles creating connections to it.
The name of the channel. Subscribers that reference this same
channel will receive any transmissions to this port.
This is a string that defaults to empty, indicating that
no channel is specified. A channel must be set before
the actor executes or an exception will occur.
Specification of whether the published data is global.
If this is set to true, then a subscriber anywhere in the model that
references the same channel by name will see values published by
this publisher. If this is set to false (the default), then only
those subscribers that are fired by the same director will see
values published on this channel.
If true, then propagate channel name changes to any
Subscribers. The default value is a BooleanToken with the
value false, indicating that if the channel name is changed,
then the channel names of the Subscribers are not changed. If
the value is true, then if the channel name is changed, the
channel names of the connected Subscribers are updated.
<p>If the value is true, then SubscriptionAggregators that
have the same regular expression as the channel name of the
Publisher will be updated. However, SubscriptionAggregators
usually have regular expressions as channel names, so usually
the channel name of the SubscriptionAggregator will <b>not</b>
be updated.</p>
<p>Note that if a Publisher is within an Actor Oriented Class
definition, then any Subscribers with the same channel name in
Actor Oriented Class definitions will <b>not</b> be updated.
This is because there is no connection between the Publisher
in the Actor Oriented Class definition and the Subscriber.
However, if the channel name in a Publisher in an instance of
an Actor Oriented Class is updated, then the
corresponding Subscribers in instances of Actor Oriented Class
will be updated.</p>