Skip to content

Commit bd5bb16

Browse files
committed
feat: realtime heartbeat
1 parent 9cc1393 commit bd5bb16

File tree

2 files changed

+26
-2
lines changed

2 files changed

+26
-2
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"name": "react-native-appwrite",
33
"homepage": "https://appwrite.io/support",
44
"description": "Appwrite is an open-source self-hosted backend server that abstract and simplify complex and repetitive development tasks behind a very simple REST API",
5-
"version": "0.5.0",
5+
"version": "0.6.0",
66
"license": "BSD-3-Clause",
77
"main": "dist/cjs/sdk.js",
88
"exports": {

src/client.ts

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,17 @@ type RealtimeRequestAuthenticate = {
4949

5050
type Realtime = {
5151
socket?: WebSocket;
52+
53+
/**
54+
* Timeout for reconnect operations.
55+
*/
5256
timeout?: number;
57+
58+
/**
59+
* Heartbeat interval for the realtime connection.
60+
*/
61+
heartbeat?: number;
62+
5363
url?: string;
5464
lastMessage?: RealtimeResponse;
5565
channels: Set<string>;
@@ -63,6 +73,7 @@ type Realtime = {
6373
getTimeout: () => number;
6474
connect: () => void;
6575
createSocket: () => void;
76+
createHeartbeat: () => void;
6677
cleanUp: (channels: string[]) => void;
6778
onMessage: (event: MessageEvent) => void;
6879
}
@@ -103,7 +114,7 @@ class Client {
103114
'x-sdk-name': 'React Native',
104115
'x-sdk-platform': 'client',
105116
'x-sdk-language': 'reactnative',
106-
'x-sdk-version': '0.5.0',
117+
'x-sdk-version': '0.6.0',
107118
'X-Appwrite-Response-Format': '1.6.0',
108119
};
109120

@@ -212,6 +223,7 @@ class Client {
212223
private realtime: Realtime = {
213224
socket: undefined,
214225
timeout: undefined,
226+
heartbeat: undefined,
215227
url: '',
216228
channels: new Set(),
217229
subscriptions: new Map(),
@@ -237,6 +249,17 @@ class Client {
237249
return 60_000;
238250
}
239251
},
252+
createHeartbeat: () => {
253+
if (this.realtime.heartbeat) {
254+
clearTimeout(this.realtime.heartbeat);
255+
}
256+
257+
this.realtime.heartbeat = window?.setInterval(() => {
258+
this.realtime.socket?.send(JSON.stringify({
259+
type: 'ping'
260+
}));
261+
}, 20_000);
262+
},
240263
createSocket: () => {
241264
if (this.realtime.channels.size < 1) {
242265
this.realtime.reconnect = false;
@@ -275,6 +298,7 @@ class Client {
275298
this.realtime.socket.addEventListener('message', this.realtime.onMessage);
276299
this.realtime.socket.addEventListener('open', _event => {
277300
this.realtime.reconnectAttempts = 0;
301+
this.realtime.createHeartbeat();
278302
});
279303
this.realtime.socket.addEventListener('close', event => {
280304
if (

0 commit comments

Comments
 (0)