(:~ : WebSocket LSP : @author Andy Bunce :) module namespace lsp-ws = 'lsp-ws'; import module namespace lsprpc = 'lsprpc' at 'jsonrpc.xqm'; 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() { 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 := lsprpc:parse($message=>trace("MSG ")) return if(exists($json)) then lsprpc:reply($json) else message($message,"bad RPC: ") }; (:~ : 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() };