(:~ : 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() };