Exponential backoff with useRef

This commit is contained in:
projectmoon 2024-08-01 17:12:21 +02:00 committed by XDA
parent d27bfbf481
commit cd28fca85d

View file

@ -28,6 +28,8 @@ const useSocket = (
hasError: boolean
) => {
const [ws, setWs] = useState<WebSocket | null>(null);
const reconnectTimeout = useRef(0);
const reconnectAttempts = useRef(0);
useEffect(() => {
if (!ws) {
@ -172,6 +174,8 @@ const useSocket = (
ws.onopen = () => {
console.log('[DEBUG] open');
reconnectTimeout.current = 0;
reconnectAttempts.current = 0;
clearTimeout(timeoutId);
setIsWSReady(true);
};
@ -184,7 +188,7 @@ const useSocket = (
ws.onclose = () => {
clearTimeout(timeoutId);
if (!hasError) {
if (!hasError && reconnectAttempts.current < 3) {
setWs(null); // forces websocket to reopen when needed.
}
console.log('[DEBUG] closed');
@ -200,7 +204,15 @@ const useSocket = (
setWs(ws);
};
connectWs();
if (reconnectAttempts.current < 3) {
console.log(`[DEBUG] Attempting to reconnect (${reconnectAttempts.current + 1}/3)`);
setTimeout(connectWs, reconnectTimeout.current);
reconnectTimeout.current = reconnectTimeout.current > 0 ? reconnectTimeout.current * 2 : 1000;
reconnectAttempts.current += 1;
} else {
console.log('[DEBUG] WebSocket reconnect failure after 3 retries');
setError(true);
}
}
return () => {