71 lines
1.8 KiB
JavaScript
71 lines
1.8 KiB
JavaScript
const debug = function() { console.debug(...arguments); };
|
|
const log = function() { console.log(...arguments) };
|
|
const error = function() { console.error(...arguments) };
|
|
|
|
async function start() {
|
|
try {
|
|
const response = await fetch('./bin/app.wasm');
|
|
if (!response.ok) {
|
|
throw new Error(`Failed to fetch WASM: ${response.status} ${response.statusText}`);
|
|
}
|
|
|
|
const wasmBytes = await response.arrayBuffer();
|
|
const wasmCompiled = await WebAssembly.compile(wasmBytes);
|
|
const wasmModule = await WebAssembly.instantiate(wasmCompiled, { });
|
|
|
|
// Set canvas size to match display size
|
|
function resizeCanvas() {
|
|
canvas.width = window.innerWidth;
|
|
canvas.height = window.innerHeight;
|
|
}
|
|
|
|
resizeCanvas();
|
|
window.addEventListener('resize', resizeCanvas);
|
|
|
|
var result = wasmModule.exports.hello();
|
|
log("Finished", result);
|
|
} catch (error) {
|
|
error('runtime error:', error);
|
|
}
|
|
}
|
|
|
|
start();
|
|
|
|
// ------- debug hot-reload code -------
|
|
{
|
|
const debugCtl = {
|
|
connect: () => {
|
|
const ws = new WebSocket(`${window.location.href}control`);
|
|
|
|
ws.onopen = () => {
|
|
log('Connected to control WebSocket');
|
|
};
|
|
|
|
ws.onmessage = (event) => {
|
|
try {
|
|
const message = JSON.parse(event.data);
|
|
log('Received message:', message);
|
|
|
|
if (message.type === 'refresh') {
|
|
log('Reloading page...');
|
|
window.location.reload();
|
|
}
|
|
} catch (error) {
|
|
error('Error parsing WebSocket message:', error);
|
|
}
|
|
};
|
|
|
|
ws.onclose = () => {
|
|
log('WebSocket disconnected, reconnecting in 2s...');
|
|
setTimeout(debugCtl.connect, 2000);
|
|
};
|
|
|
|
ws.onerror = (error) => {
|
|
error('WebSocket error:', error);
|
|
};
|
|
}
|
|
};
|
|
debugCtl.connect();
|
|
}
|
|
// -------------------------------------
|