feat(transfers): websocket bağlantısı için dayanıklılık mekanizması ekle

WebSocket bağlantısı düştüğünde otomatik yeniden bağlanma ve
geçici polling ile veri akışını sürdürme yeteneği eklendi.
Bağlantı hatalarında konsola uyarı mesajı yazdırılır ve
component kaldırıldığında timer'lar temizlenir.
This commit is contained in:
2025-12-14 20:24:58 +03:00
parent 9d370a0248
commit d69fb41024

View File

@@ -7,6 +7,7 @@
let isAllPaused = false;
let totalDownloaded = 0;
let totalDownloadSpeed = 0;
let pollTimer;
// Modal / player state
let showModal = false;
@@ -27,6 +28,12 @@
const token = getAccessToken();
const url = `${API.replace("http", "ws")}?token=${token || ""}`;
ws = new WebSocket(url);
ws.onopen = () => {
if (pollTimer) {
clearInterval(pollTimer);
pollTimer = null;
}
};
ws.onmessage = (e) => {
const d = JSON.parse(e.data);
if (d.type === "progress") {
@@ -37,6 +44,17 @@
updateTransferStats();
}
};
ws.onerror = (err) => {
console.warn("WS hata:", err);
ws.close();
};
ws.onclose = () => {
// WS koptuğunda hafif bir polling ile listeyi güncel tut
if (!pollTimer) {
pollTimer = setInterval(list, 4000);
}
setTimeout(wsConnect, 2000);
};
}
async function list() {
@@ -449,7 +467,11 @@
slider.style.setProperty("--fill", slider.value * 100);
}
window.addEventListener("keydown", onEsc);
return () => window.removeEventListener("keydown", onEsc);
return () => {
window.removeEventListener("keydown", onEsc);
if (ws) ws.close();
if (pollTimer) clearInterval(pollTimer);
};
});
</script>