Difference between revisions of "WebSocket Module"
Jump to navigation
Jump to search
Line 25: | Line 25: | ||
| '''Summary''' | | '''Summary''' | ||
|Returns the ID of the current WebSocket. | |Returns the ID of the current WebSocket. | ||
+ | |- | ||
+ | | '''Errors''' | ||
+ | |{{Error|not-found|#Errors}} No WebSocket with the specified id exists. | ||
|} | |} | ||
Line 47: | Line 50: | ||
| '''Summary''' | | '''Summary''' | ||
|Returns the path of the WebSocket with the specified {{Code|$id}}. | |Returns the path of the WebSocket with the specified {{Code|$id}}. | ||
+ | |- | ||
+ | | '''Errors''' | ||
+ | |{{Error|not-found|#Errors}} No WebSocket with the specified id exists. | ||
|} | |} | ||
Line 58: | Line 64: | ||
| '''Summary''' | | '''Summary''' | ||
|Closes the connection of the WebSocket with the specified {{Code|$id}}. | |Closes the connection of the WebSocket with the specified {{Code|$id}}. | ||
+ | |- | ||
+ | | '''Errors''' | ||
+ | |{{Error|not-found|#Errors}} No WebSocket with the specified id exists. | ||
|} | |} | ||
Line 109: | Line 118: | ||
| '''Summary''' | | '''Summary''' | ||
|Returns the value of an attribute with the specified {{Code|$name}} from the WebSocket with the specified {{Code|$id}}. If the attribute is unknown, an empty sequence or the optionally specified {{Code|$default}} value will be returned instead. | |Returns the value of an attribute with the specified {{Code|$name}} from the WebSocket with the specified {{Code|$id}}. If the attribute is unknown, an empty sequence or the optionally specified {{Code|$default}} value will be returned instead. | ||
+ | |- | ||
+ | | '''Errors''' | ||
+ | |{{Error|not-found|#Errors}} No WebSocket with the specified id exists. | ||
|} | |} | ||
Line 122: | Line 134: | ||
|- | |- | ||
| '''Errors''' | | '''Errors''' | ||
− | |{{Error|set|#Errors}} The supplied value cannot be materialized. | + | |{{Error|not-found|#Errors}} No WebSocket with the specified id exists.<br>{{Error|set|#Errors}} The supplied value cannot be materialized. |
|} | |} | ||
Line 134: | Line 146: | ||
| '''Summary''' | | '''Summary''' | ||
|Deletes an attribute with the specified {{Code|$name}} from the WebSocket with the specified {{Mono|$id}}. | |Deletes an attribute with the specified {{Code|$name}} from the WebSocket with the specified {{Mono|$id}}. | ||
+ | |- | ||
+ | | '''Errors''' | ||
+ | |{{Error|not-found|#Errors}} No WebSocket with the specified id exists. | ||
|} | |} | ||
Line 190: | Line 205: | ||
|{{Code|set}} | |{{Code|set}} | ||
|The supplied value cannot be materialized. | |The supplied value cannot be materialized. | ||
+ | |- | ||
+ | |{{Code|not-found}} | ||
+ | |No WebSocket with the specified id exists. | ||
|} | |} | ||
Revision as of 12:43, 30 January 2019
This XQuery Module contains functions for accessing specific WebSocket functions. This module is mainly useful in the context of WebSockets.
Contents
Conventions
- The module will be available if the
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
http://basex.org/modules/ws
namespace. The module must be imported in the query prolog:
import module namespace ws = "http://basex.org/modules/ws"; ...
- In this document, the namespace is bound to the
ws
prefix. - As sessions are side-effecting operations, all functions are flagged as non-deterministic. As a result, some query optimizations will be suppressed.
General Functions
ws:id
Signatures | ws:id() as xs:string
|
Summary | Returns the ID of the current WebSocket. |
Errors | not-found : No WebSocket with the specified id exists.
|
ws:ids
Signatures | ws:ids() as xs:string*
|
Summary | Returns the ids of all currently registered WebSocket. |
ws:path
Signatures | ws:path($id as xs:string) as xs:string
|
Summary | Returns the path of the WebSocket with the specified $id .
|
Errors | not-found : No WebSocket with the specified id exists.
|
ws:close
Signatures | ws:close($id as xs:string) as empty-sequence()
|
Summary | Closes the connection of the WebSocket with the specified $id .
|
Errors | not-found : No WebSocket with the specified id exists.
|
Sending Data
ws:send
Signatures | ws:send($message as item(), $ids as xs:string*) as empty-sequence()
|
Summary | Sends a $message to the clients with the specified $ids . Ids that cannot be assigned to clients will be ignored. The message will be handled as follows:
|
ws:broadcast
Signatures | ws:broadcast($message as xs:anyAtomicType) as empty-sequence()
|
Summary | Broadcasts a $message to all connected clients except to the caller. Invocations of this convenience function are equivalent to ws:send($message, ws:ids()[. != ws:id()]) . See ws:send for more details on the message handling.
|
ws:emit
Signatures | ws:emit($message as xs:anyAtomicType) as empty-sequence()
|
Summary | Emits a $message to all connected clients. Invocations of this function are equivalent to ws:send($message, ws:ids()) . See ws:send for more details on the message handling.
|
WebSocket Attributes
ws:get
Signatures | ws:get($id as xs:string, $name as xs:string) as item()* ws:get($id as xs:string, $name as xs:string, $default as item()*) as item()*
|
Summary | Returns the value of an attribute with the specified $name from the WebSocket with the specified $id . If the attribute is unknown, an empty sequence or the optionally specified $default value will be returned instead.
|
Errors | not-found : No WebSocket with the specified id exists.
|
ws:set
Signatures | ws:set($id as xs:string, $name as xs:string, $value as item()*) as empty-sequence()
|
Summary | Returns the specified value of the attribute with the specified $name from the WebSocket with the specified $id .
|
Errors | not-found : No WebSocket with the specified id exists.set : The supplied value cannot be materialized.
|
ws:delete
Signatures | ws:delete($id as xs:string, $name as xs:string) as empty-sequence()
|
Summary | Deletes an attribute with the specified $name from the WebSocket with the specified $id .
|
Errors | not-found : No WebSocket with the specified id exists.
|
Examples
Example 1
import module namespace ws = "http://basex.org/modules/ws"; declare %ws:connect('/') function local:connect() as empty-sequence() { let $id := ws:id() let $message := json:serialize(map { 'type': 'Connect', 'id': $id }) return ws:broadcast($message) };
Explanation:
- The function has a
%ws:connect
annotation. It gets called if a client successfully creates a WebSocket connection to the path/
(check out WebSockets for further information). - A JSON response is generated, which contains the new client id and a
Connect
string. - This response will be sent to all other connected clients.
Example 2
import module namespace ws = "http://basex.org/modules/ws"; declare %ws:message('/', '{$message}') function local:message( $message as xs:string ) as empty-sequence() { let $message := json:serialize(map { 'message': $message }) return ws:emit($message) };
Explanation:
- The function has a
%ws:message
annotation. It gets called if a client sends a new message. - A JSON response is generated, which contains the message string.
- This response will be sent to all connected clients (including the calling client).
Errors
Code | Description |
---|---|
set
|
The supplied value cannot be materialized. |
not-found
|
No WebSocket with the specified id exists. |
Changelog
This module was introduced with Version 9.1.