-
Notifications
You must be signed in to change notification settings - Fork 1
/
websocket.js
48 lines (44 loc) · 1.17 KB
/
websocket.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
/*
Only websocket-specific stuff.
*/
// eslint-disable-next-line no-unused-vars
class WS {
/**
* Creates a websocket connection from a URL and params to override
* @param {URL|string} url
* @param {URLSearchParams|string[][]} params
* @return {WebSocket}
*/
static makeWebsocket(url, params) {
let parsedURL = new URL(url);
let urlpa = new URLSearchParams(params);
urlpa.forEach(function (value, key) {
parsedURL.searchParams.set(key, value);
});
let ws = new WebSocket(url);
/*
'User agents can use this as a hint for how to handle incoming binary data:
if the attribute is set to 'blob', it is safe to spool it to disk, and if it
is set to 'arraybuffer', it is likely more efficient to keep the data in
memory.'
*/
ws.binaryType = 'arraybuffer';
return ws;
}
/**
* @param {URL | string} addr
*/
static probeWebsocket(addr) {
return /** @type {Promise<void>} */(new Promise((resolve, reject) => {
const ws = WS.makeWebsocket(addr, []);
ws.onopen = () => {
resolve();
ws.close();
};
ws.onerror = () => {
reject();
ws.close();
};
}));
}
}