1const sockets = new Map();
2let next = 1;
3
4export function liveConnect(url, message, closed) {
5 const id = next++;
6 const socket = new WebSocket(url);
7 socket.binaryType = 'arraybuffer';
8 socket.onmessage = event => message(event.data);
9 socket.onclose = () => {
10 liveClose(id);
11 closed();
12 };
13 sockets.set(id, socket);
14 return id;
15}
16
17export function liveSend(id, bytes) {
18 const socket = sockets.get(id);
19 if (!socket || socket.readyState !== WebSocket.OPEN) throw new Error('Relay disconnected');
20 if (socket.bufferedAmount > 1048576) throw new Error('Relay cannot keep up');
21 socket.send(bytes);
22}
23
24export function liveClose(id) {
25 const socket = sockets.get(id);
26 sockets.delete(id);
27 if (!socket) return;
28 socket.onmessage = socket.onclose = null;
29 socket.close();
30}