@@ -26,6 +26,7 @@ export function WebSocketGate() {
|
|||||||
const pingCleanupRef = useRef<PingCleanup | null>(null);
|
const pingCleanupRef = useRef<PingCleanup | null>(null);
|
||||||
|
|
||||||
const connectTimeoutRef = useRef<NodeJS.Timeout | null>(null);
|
const connectTimeoutRef = useRef<NodeJS.Timeout | null>(null);
|
||||||
|
const didConnectTimeoutRef = useRef(false);
|
||||||
const CONNECT_TIMEOUT_MS = 10_000;
|
const CONNECT_TIMEOUT_MS = 10_000;
|
||||||
|
|
||||||
const hadSocketBeforeRef = useRef(false);
|
const hadSocketBeforeRef = useRef(false);
|
||||||
@@ -139,6 +140,9 @@ export function WebSocketGate() {
|
|||||||
connectTimeoutRef.current = null;
|
connectTimeoutRef.current = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Reset timeout marker on successful connection
|
||||||
|
didConnectTimeoutRef.current = false;
|
||||||
|
|
||||||
if (hadSocketBeforeRef.current) {
|
if (hadSocketBeforeRef.current) {
|
||||||
justReconnectedRef.current = true;
|
justReconnectedRef.current = true;
|
||||||
setWebSocketStatus(t("websocket.reconnected"));
|
setWebSocketStatus(t("websocket.reconnected"));
|
||||||
@@ -177,9 +181,14 @@ export function WebSocketGate() {
|
|||||||
const connect = async () => {
|
const connect = async () => {
|
||||||
if (isConnectingRef.current || isSocketOpen) return;
|
if (isConnectingRef.current || isSocketOpen) return;
|
||||||
isConnectingRef.current = true;
|
isConnectingRef.current = true;
|
||||||
|
didConnectTimeoutRef.current = false;
|
||||||
connectTimeoutRef.current = setTimeout(() => {
|
connectTimeoutRef.current = setTimeout(() => {
|
||||||
console.warn("WebSocket connection attempt timed out");
|
console.warn("WebSocket connection attempt timed out");
|
||||||
|
|
||||||
|
didConnectTimeoutRef.current = true;
|
||||||
|
abortController.abort();
|
||||||
|
connectTimeoutRef.current = null;
|
||||||
|
isConnectingRef.current = false;
|
||||||
cleanup();
|
cleanup();
|
||||||
|
|
||||||
scheduleReconnect();
|
scheduleReconnect();
|
||||||
@@ -200,7 +209,10 @@ export function WebSocketGate() {
|
|||||||
connectTimeoutRef.current = null;
|
connectTimeoutRef.current = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
scheduleReconnect();
|
// Only schedule reconnect if the timeout handler hasn't already done so
|
||||||
|
if (!didConnectTimeoutRef.current) {
|
||||||
|
scheduleReconnect();
|
||||||
|
}
|
||||||
} finally {
|
} finally {
|
||||||
isConnectingRef.current = false;
|
isConnectingRef.current = false;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user