Skip to content

Commit 227d53b

Browse files
committed
add example to implement autoreconnect session
1 parent b47e98c commit 227d53b

1 file changed

Lines changed: 41 additions & 0 deletions

File tree

examples/reconnect.ts

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import { connectAnonymous } from "../lib";
2+
3+
async function sleep(ms: number): Promise<void> {
4+
return new Promise(resolve => setTimeout(resolve, ms));
5+
}
6+
7+
async function main() {
8+
let retryDelay = 1000; // 1 second
9+
const maxDelay = 30000; // 30 seconds
10+
11+
for (; ;) {
12+
try {
13+
const session = await connectAnonymous("ws://localhost:8080/ws", "realm1");
14+
console.log("Connected successfully");
15+
16+
// Reset backoff after successful connection
17+
retryDelay = 1000;
18+
19+
// Wait for disconnect
20+
const disconnected = new Promise<void>(resolve => {
21+
session.setDisconnectCallback(async () => {
22+
console.log("Disconnected from router!");
23+
resolve();
24+
});
25+
});
26+
27+
await disconnected;
28+
console.log("Retrying connection...");
29+
30+
} catch (err) {
31+
console.error(`Failed to connect: ${err}`);
32+
console.log(`Retrying in ${retryDelay / 1000}s...`);
33+
await sleep(retryDelay);
34+
35+
// Exponential backoff
36+
retryDelay = Math.min(retryDelay * 2, maxDelay);
37+
}
38+
}
39+
}
40+
41+
main().catch(err => console.error(`Fatal error: ${err}`));

0 commit comments

Comments
 (0)