Continue (Daemon function): Difference between revisions
m (→Usage notes) |
m (→Examples) |
||
Line 26: | Line 26: | ||
==Examples== | ==Examples== | ||
The following request exchanges and updates copies of the same XmlDoc 10 times between a master and daemon thread: | |||
<p class="code">begin | |||
%dmn is object daemon | |||
%indoc is object xmlDoc | |||
%outDoc is object xmlDoc | |||
%prog is object stringlist | |||
%dmn = new | |||
%dmn:run('*LOWER') | |||
text to %prog = new raw | |||
b | |||
%doc is object xmlDoc | |||
%i is float | |||
for %i from 1 to 10 | |||
printText **** Here I am {%i} | |||
%(daemon):returnObject(%doc) | |||
%(daemon):returnToMaster | |||
%(daemon):getInputObject(%doc) | |||
%doc:print | |||
%doc:selectSingleNode('*'):addElement('number', %i) | |||
end for | |||
%doc:selectSingleNode('*'):addAttribute('done', 'yes') | |||
%(daemon):returnObject(%doc) | |||
end | |||
end text | |||
%dmn:run(%prog):print | |||
%inDoc = new | |||
%indoc:addElement('foo') | |||
repeat forever | |||
%dmn:continue(input=%indoc, output=%outDoc):print | |||
%outDoc:print | |||
if %outDoc:valueDefault('/foo/@done') eq 'yes' then loop end; end if | |||
%inDoc = %outDoc | |||
end repeat | |||
end | |||
</p> | |||
==See also== | ==See also== | ||
{{Template:Daemon:Continue footer}} | {{Template:Daemon:Continue footer}} |
Revision as of 03:02, 13 May 2012
Continue processing in daemon (Daemon class)
[Introduced in Sirius Mods 8.1]
This method can be used to tell a daemon that did a ReturnToMaster daemon class call to continue processing at the point of the call.
Syntax
[%sl =] daemon:Continue[( [Input= object], [Output= object], [Info= object])] Throws DaemonLost, IncorrectDaemonState
Syntax terms
%stringlist | If specified, a Stringlist object to contain the terminal output from the continued request on the daemon thread. |
---|---|
daemon | A Daemon object |
Input | The input object passed to the daemon thread. This optional, name required argument is passed by deep copy and not by reference, so Input must be deep copyable, as described in: "Copying objects". The passed object can be retrieved by the daemon thread using GetInputObject. |
Output | The output object returned from the daemon thread. This optional, name required argument is passed by deep copy and not by reference, so Output must be deep copyable, as described in: "Copying objects". The object set to Output is the object passed by the daemon thread using ReturnObject.
Because Output is an output variable, it cannot itself be contained inside an object: that is, it must be a local or a common %variable. |
Info | An optional, name required parameter that indicates a second output object returned from the daemon thread. This optional argument is passed by deep copy and not by reference, so Info must be deep copyable, as described in: "Copying objects". The object set to Info is the object passed by the daemon thread using ReturnInfoObject.
Because Info is an output variable, it cannot itself be contained inside an object: that is, it must be a local or a common %variable. |
Usage notes
- Issuing a Continue against a daemon not in a ReturnToMaster wait results in a IncorrectDaemonState exception.
- ContinueAsynchronously and ContinueIndependently methods are available to tell a daemon to continue from the ReturnToMaster but to not wait for the daemon response.
Examples
The following request exchanges and updates copies of the same XmlDoc 10 times between a master and daemon thread:
begin %dmn is object daemon %indoc is object xmlDoc %outDoc is object xmlDoc %prog is object stringlist %dmn = new %dmn:run('*LOWER') text to %prog = new raw b %doc is object xmlDoc %i is float for %i from 1 to 10 printText **** Here I am {%i} %(daemon):returnObject(%doc) %(daemon):returnToMaster %(daemon):getInputObject(%doc) %doc:print %doc:selectSingleNode('*'):addElement('number', %i) end for %doc:selectSingleNode('*'):addAttribute('done', 'yes') %(daemon):returnObject(%doc) end end text %dmn:run(%prog):print %inDoc = new %indoc:addElement('foo') repeat forever %dmn:continue(input=%indoc, output=%outDoc):print %outDoc:print if %outDoc:valueDefault('/foo/@done') eq 'yes' then loop end; end if %inDoc = %outDoc end repeat end