UNPKG

1.62 kBPlain TextView Raw
1/* --------------------------------------------------------------------------------------------
2 * Copyright (c) 2018-2022 TypeFox GmbH (http://www.typefox.io). All rights reserved.
3 * Licensed under the MIT License. See License.txt in the project root for license information.
4 * ------------------------------------------------------------------------------------------ */
5
6import { MessageConnection, Logger } from 'vscode-jsonrpc';
7import { createWebSocketConnection } from './socket/connection.js';
8import { IWebSocket } from './socket/socket.js';
9import { ConsoleLogger } from './logger.js';
10
11export function listen(options: {
12 webSocket: WebSocket;
13 logger?: Logger;
14 onConnection: (connection: MessageConnection) => void;
15}) {
16 const { webSocket, onConnection } = options;
17 const logger = options.logger || new ConsoleLogger();
18 webSocket.onopen = () => {
19 const socket = toSocket(webSocket);
20 const connection = createWebSocketConnection(socket, logger);
21 onConnection(connection);
22 };
23}
24
25export function toSocket(webSocket: WebSocket): IWebSocket {
26 return {
27 send: content => webSocket.send(content),
28 onMessage: cb => {
29 webSocket.onmessage = event => cb(event.data);
30 },
31 onError: cb => {
32 webSocket.onerror = event => {
33 if ('message' in event) {
34 cb((event as any).message);
35 }
36 };
37 },
38 onClose: cb => {
39 webSocket.onclose = event => cb(event.code, event.reason);
40 },
41 dispose: () => webSocket.close()
42 };
43}