<script>
debug(
"This document is in *development mode*. Document will reload automatically.",
);
function debug(message) {
console.debug(
"%cDEBUG",
"color: #8F4; background-color: #6826;",
message,
);
}
const RECONNECT_INTERVAL = 0.5;
const MAX_RECONNECT_ATTEMPTS = 50;
let ws;
connect();
let last_client_load = Date.now() / 1000;
function connect() {
if (ws) {
ws.close();
}
debug("WS: Connecting...");
ws = new WebSocket("ws://localhost:{{PORT}}");
ws.onopen = event => {
debug("WS: Websocket open");
cancel_reconnect();
recent_reconnect_attempts = 0;
};
ws.onclose = error => {
debug("WS: Websocket closed");
reconnect();
};
ws.onerror = error => {
console.error("[debug] WS: Failed to connect!");
};
ws.onmessage = event => {
if (event.data === "reload") {
reload();
} else {
let last_server_load = parseInt(event.data);
if (last_server_load > last_client_load) {
reload();
}
}
};
}
let reconnect_interval;
let recent_reconnect_attempts = 0;
function reconnect() {
cancel_reconnect();
reconnect_interval = setInterval(() => {
recent_reconnect_attempts += 1;
if (recent_reconnect_attempts > MAX_RECONNECT_ATTEMPTS) {
console.warn(
"[debug] Maximum websocket reconnect attempts met. This page will no longer reload automatically.",
);
cancel_reconnect();
return;
}
connect();
}, RECONNECT_INTERVAL * 1000);
}
function cancel_reconnect() {
clearInterval(reconnect_interval);
}
function reload() {
debug("Reloading page!");
location.reload();
}
</script>