Skip to content
This repository was archived by the owner on Apr 2, 2024. It is now read-only.

Commit 7f9d6df

Browse files
authored
Improve ping pong to only start when connected (#260)
1 parent 48781ac commit 7f9d6df

File tree

1 file changed

+24
-12
lines changed

1 file changed

+24
-12
lines changed

src/websocketService/index.ts

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ const pingintervalInMilliseconds = 30000;
2020
const websocketSettings: Options = {
2121
retryOnError: true,
2222
reconnectAttempts: 10,
23-
reconnectInterval: 3000,
23+
reconnectInterval: 10000,
2424
shouldReconnect: (closeEvent: any) => {
2525
console.log(closeEvent);
2626
return true;
@@ -45,9 +45,17 @@ const useWebsocketServiceWithAuth = <T extends object>(endpoint: string): SurfWe
4545
}, [baseUrl, auth.userData?.access_token]);
4646

4747
useEffect(() => {
48-
const pingInterval = setInterval(() => sendMessage(pingMessage), pingintervalInMilliseconds);
49-
return () => clearInterval(pingInterval);
50-
}, [sendMessage]);
48+
let pingInterval: NodeJS.Timeout | undefined = undefined;
49+
50+
if (readyState === ReadyState.OPEN) {
51+
pingInterval = setInterval(() => sendMessage(pingMessage), pingintervalInMilliseconds);
52+
} else {
53+
pingInterval && clearInterval(pingInterval);
54+
pingInterval = undefined;
55+
}
56+
57+
return () => pingInterval && clearInterval(pingInterval);
58+
}, [sendMessage, readyState]);
5159

5260
useEffect(() => {
5361
if (lastMessage && lastMessage.data === "__pong__") {
@@ -64,17 +72,21 @@ const useWebsocketServiceWithoutAuth = <T extends object>(endpoint: string): Sur
6472
const [useFallback, setUsefallback] = useState<boolean>(false);
6573

6674
useEffect(() => {
67-
if (readyState === ReadyState.CLOSED) {
68-
setUsefallback(true);
69-
} else {
70-
setUsefallback(false);
71-
}
75+
setUsefallback(readyState === ReadyState.CLOSED);
7276
}, [readyState]);
7377

7478
useEffect(() => {
75-
const pingInterval = setInterval(() => sendMessage(pingMessage), pingintervalInMilliseconds);
76-
return () => clearInterval(pingInterval);
77-
}, [sendMessage]);
79+
let pingInterval: NodeJS.Timeout | undefined = undefined;
80+
81+
if (readyState === ReadyState.OPEN) {
82+
pingInterval = setInterval(() => sendMessage(pingMessage), pingintervalInMilliseconds);
83+
} else {
84+
pingInterval && clearInterval(pingInterval);
85+
pingInterval = undefined;
86+
}
87+
88+
return () => pingInterval && clearInterval(pingInterval);
89+
}, [sendMessage, readyState]);
7890

7991
useEffect(() => {
8092
if (lastMessage && lastMessage.data === "__pong__") {

0 commit comments

Comments
 (0)