Difference between revisions of "WebSocket Module"

From BaseX Documentation
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.

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:
  • Items of type xs:base64Binary and xs:hexBinary will be transmitted as binary messages.
  • Function items (maps, arrays) will be serialized as JSON and transmitted as string messages.
  • All other items will be serialized with the default serialization options and transmitted as string messages.

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.