Changes

Jump to navigation Jump to search
1,836 bytes added ,  14:43, 27 February 2020
no edit summary
=Conventions=
* The module will be available if the {{Code|basex-api}} package must be included library is found in the classpath. This is always the case if you use one of the complete distributions of BaseX (zip, exe, war) of BaseX.* All functions and errors are assigned to the <code><nowiki>http://basex.org/modules/ws</nowiki></code> namespace. The module must be imported in , which is statically bound to the query prolog: <pre class="brush:xquery">import module namespace {{Code|ws = "http://basex}} prefix.org/modules/ws";* As sessions are side-effecting operations, all functions are flagged as ''non-deterministic''.As a result, some query optimizations will be suppressed..</pre>
=General Functions=
|-
| '''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/Websocketws";
declare
%ws:connect('/')
function local:connect() as xs:string empty-sequence() {
let $id := ws:id()
let $message := json:serialize(map {
return ws:broadcast($message)
};
</presyntaxhighlight>
'''Explanation:'''
==Example 2==
<pre classsyntaxhighlight lang="brush:xquery">import module namespace ws = "http://basex.org/modules/Websocketws";
declare
function local:message(
$message as xs:string
) as xs:string empty-sequence() {
let $message := json:serialize(map { 'message': $message })
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
13,550

edits

Navigation menu