mirror of
https://github.com/Shik3i/KoalaSync.git
synced 2026-08-31 21:21:41 +00:00
refactor(extension): implement infinite, low-frequency background reconnect checks after initial 5-minute failure
This commit is contained in:
+46
-3
@@ -105,6 +105,8 @@ ensureState();
|
|||||||
let reconnectTimer = null;
|
let reconnectTimer = null;
|
||||||
let reconnectStartTime = null; // New: track when reconnection started
|
let reconnectStartTime = null; // New: track when reconnection started
|
||||||
let reconnectFailed = false; // New: true if we hit the 5-min cap
|
let reconnectFailed = false; // New: true if we hit the 5-min cap
|
||||||
|
let slowReconnectTimer = null; // Infinite slow background reconnect timer
|
||||||
|
let isSlowReconnectAttempt = false; // True during slow background reconnect execution
|
||||||
|
|
||||||
// Force Sync Coordination
|
// Force Sync Coordination
|
||||||
let isForceSyncInitiator = false;
|
let isForceSyncInitiator = false;
|
||||||
@@ -233,8 +235,9 @@ async function connect() {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (reconnectFailed) {
|
if (reconnectFailed && !isSlowReconnectAttempt) {
|
||||||
isConnecting = false;
|
isConnecting = false;
|
||||||
|
scheduleSlowReconnect(); // Keep checking in the background
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -283,6 +286,12 @@ async function connect() {
|
|||||||
addLog('WebSocket Connection Opened', 'success');
|
addLog('WebSocket Connection Opened', 'success');
|
||||||
reconnectStartTime = null;
|
reconnectStartTime = null;
|
||||||
reconnectFailed = false;
|
reconnectFailed = false;
|
||||||
|
isSlowReconnectAttempt = false;
|
||||||
|
if (slowReconnectTimer) {
|
||||||
|
clearTimeout(slowReconnectTimer);
|
||||||
|
slowReconnectTimer = null;
|
||||||
|
}
|
||||||
|
chrome.storage.session.set({ reconnectFailed: false });
|
||||||
isNamespaceJoined = false;
|
isNamespaceJoined = false;
|
||||||
socket.send('40');
|
socket.send('40');
|
||||||
};
|
};
|
||||||
@@ -412,7 +421,14 @@ function showNotification(senderName, action) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function scheduleReconnect() {
|
function scheduleReconnect() {
|
||||||
if (reconnectTimer || reconnectFailed) return;
|
if (reconnectTimer) return;
|
||||||
|
|
||||||
|
isSlowReconnectAttempt = false;
|
||||||
|
|
||||||
|
if (reconnectFailed) {
|
||||||
|
scheduleSlowReconnect();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (!reconnectStartTime) reconnectStartTime = Date.now();
|
if (!reconnectStartTime) reconnectStartTime = Date.now();
|
||||||
|
|
||||||
@@ -420,8 +436,9 @@ function scheduleReconnect() {
|
|||||||
if (Date.now() - reconnectStartTime > 300000) {
|
if (Date.now() - reconnectStartTime > 300000) {
|
||||||
reconnectFailed = true;
|
reconnectFailed = true;
|
||||||
chrome.storage.session.set({ reconnectFailed: true });
|
chrome.storage.session.set({ reconnectFailed: true });
|
||||||
addLog('Reconnection failed after 5 minutes. Please try again manually.', 'error');
|
addLog('Reconnection failed after 5 minutes. Entering slow background retry mode.', 'error');
|
||||||
broadcastConnectionStatus('reconnect_failed');
|
broadcastConnectionStatus('reconnect_failed');
|
||||||
|
scheduleSlowReconnect();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -432,6 +449,20 @@ function scheduleReconnect() {
|
|||||||
}, reconnectDelay);
|
}, reconnectDelay);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function scheduleSlowReconnect() {
|
||||||
|
if (slowReconnectTimer || socket || isConnecting) return;
|
||||||
|
|
||||||
|
slowReconnectTimer = setTimeout(async () => {
|
||||||
|
slowReconnectTimer = null;
|
||||||
|
await ensureState();
|
||||||
|
if (reconnectFailed && !socket && !isConnecting) {
|
||||||
|
addLog('Performing background reconnection attempt...', 'info');
|
||||||
|
isSlowReconnectAttempt = true;
|
||||||
|
connect();
|
||||||
|
}
|
||||||
|
}, 300000); // 5 minutes (300,000ms)
|
||||||
|
}
|
||||||
|
|
||||||
function emit(event, data) {
|
function emit(event, data) {
|
||||||
if (socket && socket.readyState === WebSocket.OPEN && isNamespaceJoined) {
|
if (socket && socket.readyState === WebSocket.OPEN && isNamespaceJoined) {
|
||||||
const msg = `42${JSON.stringify([event, data])}`;
|
const msg = `42${JSON.stringify([event, data])}`;
|
||||||
@@ -930,6 +961,12 @@ async function handleAsyncMessage(message, sender, sendResponse) {
|
|||||||
if (message.type === 'CONNECT') {
|
if (message.type === 'CONNECT') {
|
||||||
reconnectFailed = false;
|
reconnectFailed = false;
|
||||||
reconnectStartTime = null;
|
reconnectStartTime = null;
|
||||||
|
isSlowReconnectAttempt = false;
|
||||||
|
if (slowReconnectTimer) {
|
||||||
|
clearTimeout(slowReconnectTimer);
|
||||||
|
slowReconnectTimer = null;
|
||||||
|
}
|
||||||
|
chrome.storage.session.set({ reconnectFailed: false });
|
||||||
const settings = await getSettings();
|
const settings = await getSettings();
|
||||||
if (settings.roomId) {
|
if (settings.roomId) {
|
||||||
leaveOldRoomIfSwitching(settings.roomId);
|
leaveOldRoomIfSwitching(settings.roomId);
|
||||||
@@ -954,6 +991,12 @@ async function handleAsyncMessage(message, sender, sendResponse) {
|
|||||||
reconnectFailed = false;
|
reconnectFailed = false;
|
||||||
reconnectStartTime = null;
|
reconnectStartTime = null;
|
||||||
reconnectDelay = 1000;
|
reconnectDelay = 1000;
|
||||||
|
isSlowReconnectAttempt = false;
|
||||||
|
if (slowReconnectTimer) {
|
||||||
|
clearTimeout(slowReconnectTimer);
|
||||||
|
slowReconnectTimer = null;
|
||||||
|
}
|
||||||
|
chrome.storage.session.set({ reconnectFailed: false });
|
||||||
connect();
|
connect();
|
||||||
sendResponse({ status: 'ok' });
|
sendResponse({ status: 'ok' });
|
||||||
} else if (message.type === 'GET_STATUS') {
|
} else if (message.type === 'GET_STATUS') {
|
||||||
|
|||||||
Reference in New Issue
Block a user