basex-lsp/webapp/lsp/lsp-ws.xqm

53 lines
1.3 KiB
Text

(:~
: Simple WebSocket chat. WebSocket functions.
: @author BaseX Team, BSD License
:)
module namespace lsp-ws = 'lsp-ws';
import module namespace chat-util = 'chat/util' at 'lsp-util.xqm';
declare
%ws:error('/lsp', '{$error}')
function lsp-ws:error($error) {
trace($error,"ERR ")
};
(:~
: Creates a WebSocket connection. Registers the user and notifies all clients.
:)
declare
%ws:connect('/lsp')
function lsp-ws:connect() as empty-sequence() {
let $_:=ws:id()=>trace("CONNECT2: ")
let $_:=session:get($chat-util:id)=>trace("CONNECTx: ")
return ws:set(ws:id()=>trace("CONNECT: "), $chat-util:id, "session:get($chat-util:id)")
(: ,chat-util:users() :)
};
(:~
: Processes a WebSocket message.
: @param $message message
:)
declare
%ws:message('/lsp', '{$message}')
function lsp-ws:message(
$message as xs:string
) as empty-sequence() {
let $json := parse-json($message=>trace("MSG "))
let $type := $json?type
return if($type = 'message') then (
chat-util:message($json?text, $json?to)
) else if($type = 'ping') then(
(: do nothing :)
) else error()
};
(:~
: Closes a WebSocket connection. Unregisters the user and notifies all clients.
:)
declare
%ws:close('/lsp')
function lsp-ws:close() as empty-sequence() {
ws:delete(ws:id(), $chat-util:id),
chat-util:users()
};