JoinStation

The receive-side of a fork-join pair: holds each parent until all of its children have arrived, then emits the parent onward. A parent and its expected child count are registered by the paired ForkStation at fork time; the join holds state keyed by parent.id and releases the parent when arrivedChildren == expectedChildren regardless of arrival order (parent-first or children-first).

The join has two named input endpoints:

  • parentInput (index 0): receives the parent (after any concurrent parent-side processing).

  • childInput (index 1): receives each child as it finishes the child-side path; children are absorbed here (not forwarded).

The join is parented to the network and registered by name; route a downstream node to a specific input with the "joinName#0" (parent) or "joinName#1" (child) target syntax (consistent with NWay/Match).

Properties

Link copied to clipboard
open override val hasOnwardRouting: Boolean

True if this node has any onward routing configured (a static next receiver, a station-level sender, or a class route). A non-terminal node for which this is false — and which is not a non-terminal step of a registered route — is a dangling node and fails validation.

Link copied to clipboard
open override val numJoined: CounterCIfc

The number of parents released (joined).

Link copied to clipboard

Time-weighted number of parents currently waiting for their children.

Functions

Link copied to clipboard

Returns the receiver endpoint where children will arrive (index 1).

Link copied to clipboard
protected open override fun initialize()

This method should be overridden by subclasses that need actions performed to initialize prior to a replication. It is called once before each replication occurs if the model element wants initialization. It is called after beforeReplication() is called

Link copied to clipboard

Returns the input endpoint by index — 0 for parent, 1 for child.

Link copied to clipboard

Sets the receiver of joined parents.

Link copied to clipboard
open override fun outlets(): List<QObjectReceiverIfc>

The statically known receivers this node may route to. Best-effort: empty when the node has no static link or when its routing is opaque (for example, a probabilistic sender whose destinations are not introspectable).

Link copied to clipboard

Returns the receiver endpoint where the parent will eventually arrive (index 0).

Link copied to clipboard
open override fun receive(arrivingQObject: ModelElement.QObject)

Default receive: delegates to parentInput so the join can be referenced as a single registered node when routing a parent to it (the child path is reached via the #1 input or childInput directly).