silphius/app/client/prediction.js

35 lines
1016 B
JavaScript
Raw Normal View History

2024-07-20 21:26:00 -05:00
import {encode} from '@/net/packets/index.js';
2024-07-22 00:13:03 -05:00
import {withResolvers} from '@/util/promise.js';
2024-06-13 02:47:28 -05:00
2024-06-10 22:42:30 -05:00
let connected = false;
let socket;
2024-06-13 02:47:28 -05:00
function onMessage(event) {
postMessage(event.data);
}
2024-06-10 22:42:30 -05:00
onmessage = async (event) => {
if (!connected) {
2024-06-12 23:17:24 -05:00
const url = new URL(`wss://${event.data.host}/ws`)
socket = new WebSocket(url.href);
2024-06-10 22:42:30 -05:00
socket.binaryType = 'arraybuffer';
2024-07-22 00:13:03 -05:00
const {promise, resolve} = withResolvers();
2024-06-13 02:47:28 -05:00
socket.addEventListener('open', resolve);
2024-06-13 12:24:32 -05:00
socket.addEventListener('error', () => {
postMessage(encode({type: 'ConnectionStatus', payload: 'aborted'}));
close();
});
2024-06-13 02:47:28 -05:00
await promise;
socket.removeEventListener('open', resolve);
socket.addEventListener('message', onMessage);
socket.addEventListener('close', () => {
2024-06-13 12:24:32 -05:00
postMessage(encode({type: 'ConnectionStatus', payload: 'aborted'}));
2024-06-13 02:47:28 -05:00
close();
2024-06-10 22:42:30 -05:00
});
2024-06-13 12:24:32 -05:00
postMessage(encode({type: 'ConnectionStatus', payload: 'connected'}));
2024-06-10 22:42:30 -05:00
connected = true;
return;
}
socket.send(event.data);
};