-
Notifications
You must be signed in to change notification settings - Fork 30
Workflow model
Description: a process produces or consumes multiple signals (a collection) in a single firing.
Example 1: producing a collection
function foo(ins, outs, config, cb) {
outs.sig1.data = [1, 2, 3, 4, 5];
cb(outs);
}Semantics: function foo returns five instances of signal sig1 which will be emitted separately. (In order to emit an array of elements as one signal, one should use: ins[0].data = [[1, 2, 3, 4, 5]].
Example 2: consuming a collection
In order to consume multiple signals in a single firing, one should utilize Signal quantities (see examples below).
Description: specify how many instances of a given input signal are required to fire a process.
Example:
processes: {
"name": "Sqr"
"ins": [ "square:3" ]
...
}Semantics: process Sqr needs 3 instances of signal square to fire.
Description: dynamically set the quantity of signals required for firing of a process.
Example:
processes: {
"name": "FileListGenerator",
"outs": [ "file:fileCount" ]
...
}, {
"name": "FileProcessor",
"ins": [ "file" ],
"outs": [ "result" ]
...
}, {
"name": "ResultCollector",
"ins": [ "result:fileCount" ]
...
}
...
signals: {
"name": "fileCount",
"control": "count"
}
...Semantics: when process FileListGenerator produces one or more file signals, it will also emit the fileCount control signal which passes the quantity of file signals to the ResultCollector process. Consequently, ResultCollector will fire only after having received the specified quantity of the result signals.
Description
Example:
TODOSemantics:
Description: mark an input signal of a process as sticky. When a signal is consumed from a sticky input, it is not removed from that input queue, so that it can be consumed again. A signal arriving at a sticky input is not enqueued; instead, it replaces the signal currently associated with this input.
Usage: useful for configuration inputs whose values last in multiple firings. Such signals, when marked as sticky, conveniently need not be emitted multiple times.
Example:
processes: {
"name": "Foo"
"ins": [ "bar" ]
"sticky": [ "bar" ]
...
}Semantics: signal bar will behave as sticky in process Foo.
Description: set a minimum time interval which needs to pass between consecutive firings of a process.
Usage: useful for processes with no inputs, e.g. such that generate input signals for other processes. The firing interval can set the frequency at which such signals are produced.
Example:
processes: {
"name": "Foo",
"firingInterval": 1500
...
}Semantics: process Foo will fire not more frequently than every 1500 miliseconds.
Description
Example:
TODOSemantics: