Changes

Jump to navigation Jump to search
1,593 bytes added ,  15:43, 27 February 2020
no edit summary
* The module will be available if the {{Code|basex-api}} library is found in the classpath. This is the case if you use one of the complete distributions of BaseX (zip, exe, war).
* All functions and errors are assigned to the <code><nowiki>http://basex.org/modules/ws</nowiki></code> namespace. The module must be imported in the query prolog: <pre class="brush:xquery">import module namespace ws = "http://basex.org/modules/ws";...</pre> * In this document, the namespace which is statically bound to the {{Code|ws}} prefix.
* As sessions are side-effecting operations, all functions are flagged as ''non-deterministic''. As a result, some query optimizations will be suppressed.
|-
| '''Summary'''
|Returns the ids of all currently registered WebSocketWebSockets.
|}
| '''Summary'''
|Emits a <code>$message</code> to all connected clients. Invocations of this function are equivalent to <code>ws:send($message, ws:ids())</code>. See [[#ws:send|ws:send]] for more details on the message handling.
|}
 
==ws:eval==
 
{| width='100%'
|-
| width='120' | '''Signatures'''
|{{Func|ws:eval|$query as xs:anyAtomicItem|xs:string}}<br />{{Func|ws:eval|$query as xs:anyAtomicItem, $bindings as map(*)?|xs:string}}<br />{{Func|ws:eval|$query as xs:anyAtomicItem, $bindings as map(*)?, $options as map(*)?|xs:string}}<br />
|-
| '''Summary'''
|Schedules the evaluation of the supplied {{Code|$query}} and returns the result to the calling WebSocket client. The query can be a URI or a string, and variables and context items can be declared via {{Code|$bindings}} (see {{Function|XQuery|xquery:eval}} for more details). The following {{Code|$options}} can be supplied:
* {{Code|base-uri}}: sets the [https://www.w3.org/TR/xquery-31/#dt-static-base-uri base-uri property] for the query. This URI will be used when resolving relative URIs, such as with {{Code|fn:doc}}.
* {{Code|id}}: sets a custom job id. The id must not start with the standard <code>job</code> prefix, and it can only be assigned if no job with the same name exists.
Query scheduling is recommendable if the immediate query execution might be too time consuming and lead to a timeout.
|-
| '''Errors'''
|{{Error|overflow|#Errors}} Query execution is rejected, because too many jobs are queued or being executed. <br/>{{Error|id|#Errors}} The specified id is invalid or has already been assigned.
|-
| '''Examples'''
|
* Schedule a second query that will notify the client 10 seconds later that a message was processed:
<syntaxhighlight lang="xquery">
declare
%ws:message('/tasks', '{$message}')
function local:message($message) {
ws:eval('prof:sleep(10000), "Your message has been processed."')
};
</syntaxhighlight>
|}
==Example 1==
<pre classsyntaxhighlight lang="brush:xquery">
import module namespace ws = "http://basex.org/modules/ws";
return ws:broadcast($message)
};
</presyntaxhighlight>
'''Explanation:'''
==Example 2==
<pre classsyntaxhighlight lang="brush:xquery">
import module namespace ws = "http://basex.org/modules/ws";
return ws:emit($message)
};
</presyntaxhighlight>
'''Explanation:'''
=Changelog=
 
;Version 9.2
 
* Added: [[#ws:eval|ws:eval]]
This module was introduced with Version 9.1.
Bureaucrats, editor, reviewer, Administrators
12,227

edits

Navigation menu