Skip to content

Commit 47622c0

Browse files
committed
add example to implement autoreconnect session
1 parent 19e5d18 commit 47622c0

1 file changed

Lines changed: 55 additions & 0 deletions

File tree

examples/reconnect.ts

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
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+
// Register multiple disconnect callbacks
20+
session.onDisconnect(async () => {
21+
console.log("Callback 1: disconnection event.");
22+
});
23+
24+
session.onDisconnect(async () => {
25+
console.log("Callback 2: disconnection event.");
26+
await sleep(500);
27+
});
28+
29+
session.onDisconnect(async () => {
30+
console.log("Callback 3: disconnection event.");
31+
});
32+
33+
// Wait for disconnect
34+
const disconnected = new Promise<void>(resolve => {
35+
session.onDisconnect(async () => {
36+
console.log("Disconnected from router!");
37+
resolve();
38+
});
39+
});
40+
41+
await disconnected;
42+
console.log("Retrying connection...");
43+
44+
} catch (err) {
45+
console.error(`Failed to connect: ${err}`);
46+
console.log(`Retrying in ${retryDelay / 1000}s...`);
47+
await sleep(retryDelay);
48+
49+
// Exponential backoff
50+
retryDelay = Math.min(retryDelay * 2, maxDelay);
51+
}
52+
}
53+
}
54+
55+
main().catch(err => console.error(`Fatal error: ${err}`));

0 commit comments

Comments
 (0)