53 lines
1 KiB
Text
53 lines
1 KiB
Text
(:~
|
|
: WebSocket LSP
|
|
: @author Andy Bunce
|
|
:)
|
|
module namespace lsp-ws = 'lsp-ws';
|
|
|
|
import module namespace lsprpc = 'lsprpc' at 'jsonrpc.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 $id:=ws:id()=>trace("CONNECT: ")
|
|
return (
|
|
ws:set($id, "id", $id),
|
|
ws:set($id, "initialized", false())
|
|
)
|
|
};
|
|
|
|
(:~
|
|
: 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.
|
|
:)
|
|
declare
|
|
%ws:close('/lsp')
|
|
function lsp-ws:close() as empty-sequence() {
|
|
message("SOCKET CLOSE: " || ws:id())
|
|
};
|