stayge-ws-client-sdk 0.1.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -1
- package/deploy.patch.sh +3 -0
- package/dist/index.d.mts +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/react/index.js +24 -5
- package/dist/react/index.mjs +24 -5
- package/dist/react-native/index.js +24 -5
- package/dist/react-native/index.mjs +24 -5
- package/package.json +2 -2
- package/src/core/WebSocketClient.ts +1 -0
- package/src/core/WebSocketClientImpl.ts +29 -5
package/README.md
CHANGED
|
@@ -37,10 +37,21 @@ stayge-ws-client-sdk/
|
|
|
37
37
|
|
|
38
38
|
```
|
|
39
39
|
|
|
40
|
-
## 빌드
|
|
40
|
+
## 빌드
|
|
41
41
|
|
|
42
42
|
```
|
|
43
43
|
npm run build
|
|
44
|
+
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## 배포
|
|
48
|
+
|
|
49
|
+
```
|
|
50
|
+
npm version patch
|
|
51
|
+
# 또는
|
|
52
|
+
npm version minor
|
|
53
|
+
npm version major
|
|
54
|
+
|
|
44
55
|
npm publish --access public
|
|
45
56
|
|
|
46
57
|
```
|
package/deploy.patch.sh
ADDED
package/dist/index.d.mts
CHANGED
|
@@ -14,6 +14,7 @@ interface WebSocketClient {
|
|
|
14
14
|
subscribe(topic: string): void;
|
|
15
15
|
unsubscribe(topic: string): void;
|
|
16
16
|
onConnect(callback: () => void): void;
|
|
17
|
+
onDisconnect(callback: () => void): void;
|
|
17
18
|
onMessage(callback: (message: MessageFromServer) => void): void;
|
|
18
19
|
}
|
|
19
20
|
|
package/dist/index.d.ts
CHANGED
|
@@ -14,6 +14,7 @@ interface WebSocketClient {
|
|
|
14
14
|
subscribe(topic: string): void;
|
|
15
15
|
unsubscribe(topic: string): void;
|
|
16
16
|
onConnect(callback: () => void): void;
|
|
17
|
+
onDisconnect(callback: () => void): void;
|
|
17
18
|
onMessage(callback: (message: MessageFromServer) => void): void;
|
|
18
19
|
}
|
|
19
20
|
|
package/dist/react/index.js
CHANGED
|
@@ -32,20 +32,24 @@ var WebSocketClientImpl = class {
|
|
|
32
32
|
this.accessToken = accessToken;
|
|
33
33
|
this.ws = null;
|
|
34
34
|
this.onConnectCallback = null;
|
|
35
|
+
this.onDisconnectCallback = null;
|
|
35
36
|
this.onMessageCallback = null;
|
|
36
37
|
this.reconnectAttempts = 0;
|
|
38
|
+
this.isConnected = false;
|
|
37
39
|
}
|
|
38
40
|
connect() {
|
|
39
41
|
this.ws = new WebSocket(this.url);
|
|
40
42
|
this.ws.onopen = () => {
|
|
43
|
+
console.log("WebSocketClient:onopen");
|
|
44
|
+
this.isConnected = true;
|
|
41
45
|
this.reconnectAttempts = 0;
|
|
42
46
|
if (this.onConnectCallback) {
|
|
43
47
|
this.onConnectCallback();
|
|
44
48
|
}
|
|
45
49
|
};
|
|
46
50
|
this.ws.onerror = (error) => {
|
|
47
|
-
console.error("
|
|
48
|
-
this.
|
|
51
|
+
console.error("WebSocketClient:onerror", error);
|
|
52
|
+
this.disconnect();
|
|
49
53
|
};
|
|
50
54
|
this.ws.onmessage = (event) => {
|
|
51
55
|
if (this.onMessageCallback) {
|
|
@@ -53,20 +57,26 @@ var WebSocketClientImpl = class {
|
|
|
53
57
|
const message = JSON.parse(event.data);
|
|
54
58
|
this.onMessageCallback(message);
|
|
55
59
|
} catch (error) {
|
|
56
|
-
console.error("
|
|
60
|
+
console.error("WebSocketClient:onmessage", error);
|
|
57
61
|
}
|
|
58
62
|
}
|
|
59
63
|
};
|
|
60
64
|
this.ws.onclose = () => {
|
|
61
|
-
console.error("
|
|
65
|
+
console.error("WebSocketClient:onclose");
|
|
66
|
+
if (this.onDisconnectCallback) {
|
|
67
|
+
this.onDisconnectCallback();
|
|
68
|
+
}
|
|
62
69
|
this.reconnect();
|
|
63
70
|
};
|
|
64
71
|
}
|
|
65
72
|
disconnect() {
|
|
73
|
+
console.log("WebSocketClient:disconnect");
|
|
66
74
|
this.ws?.close();
|
|
67
75
|
this.ws = null;
|
|
76
|
+
this.isConnected = false;
|
|
68
77
|
}
|
|
69
78
|
subscribe(topic) {
|
|
79
|
+
console.log("WebSocketClient:subscribe");
|
|
70
80
|
const message = {
|
|
71
81
|
clientId: this.clientId,
|
|
72
82
|
type: "subscribe",
|
|
@@ -75,20 +85,29 @@ var WebSocketClientImpl = class {
|
|
|
75
85
|
this.ws?.send(JSON.stringify(message));
|
|
76
86
|
}
|
|
77
87
|
unsubscribe(topic) {
|
|
88
|
+
console.log("WebSocketClient:unsubscribe");
|
|
78
89
|
const message = {
|
|
79
90
|
clientId: this.clientId,
|
|
80
91
|
type: "unsubscribe",
|
|
81
92
|
topic
|
|
82
93
|
};
|
|
94
|
+
this.ws?.send(JSON.stringify(message));
|
|
83
95
|
}
|
|
84
96
|
onConnect(callback) {
|
|
85
97
|
this.onConnectCallback = callback;
|
|
86
98
|
}
|
|
99
|
+
onDisconnect(callback) {
|
|
100
|
+
this.onDisconnectCallback = callback;
|
|
101
|
+
}
|
|
87
102
|
onMessage(callback) {
|
|
88
103
|
this.onMessageCallback = callback;
|
|
89
104
|
}
|
|
90
105
|
reconnect() {
|
|
91
|
-
console.log("
|
|
106
|
+
console.log("WebSocketClient:reconnect");
|
|
107
|
+
if (this.isConnected && this.onDisconnectCallback) {
|
|
108
|
+
this.onDisconnectCallback();
|
|
109
|
+
}
|
|
110
|
+
this.isConnected = false;
|
|
92
111
|
const delay = Math.min(1e3 * Math.pow(2, this.reconnectAttempts), 1e4);
|
|
93
112
|
this.reconnectAttempts++;
|
|
94
113
|
setTimeout(() => {
|
package/dist/react/index.mjs
CHANGED
|
@@ -6,20 +6,24 @@ var WebSocketClientImpl = class {
|
|
|
6
6
|
this.accessToken = accessToken;
|
|
7
7
|
this.ws = null;
|
|
8
8
|
this.onConnectCallback = null;
|
|
9
|
+
this.onDisconnectCallback = null;
|
|
9
10
|
this.onMessageCallback = null;
|
|
10
11
|
this.reconnectAttempts = 0;
|
|
12
|
+
this.isConnected = false;
|
|
11
13
|
}
|
|
12
14
|
connect() {
|
|
13
15
|
this.ws = new WebSocket(this.url);
|
|
14
16
|
this.ws.onopen = () => {
|
|
17
|
+
console.log("WebSocketClient:onopen");
|
|
18
|
+
this.isConnected = true;
|
|
15
19
|
this.reconnectAttempts = 0;
|
|
16
20
|
if (this.onConnectCallback) {
|
|
17
21
|
this.onConnectCallback();
|
|
18
22
|
}
|
|
19
23
|
};
|
|
20
24
|
this.ws.onerror = (error) => {
|
|
21
|
-
console.error("
|
|
22
|
-
this.
|
|
25
|
+
console.error("WebSocketClient:onerror", error);
|
|
26
|
+
this.disconnect();
|
|
23
27
|
};
|
|
24
28
|
this.ws.onmessage = (event) => {
|
|
25
29
|
if (this.onMessageCallback) {
|
|
@@ -27,20 +31,26 @@ var WebSocketClientImpl = class {
|
|
|
27
31
|
const message = JSON.parse(event.data);
|
|
28
32
|
this.onMessageCallback(message);
|
|
29
33
|
} catch (error) {
|
|
30
|
-
console.error("
|
|
34
|
+
console.error("WebSocketClient:onmessage", error);
|
|
31
35
|
}
|
|
32
36
|
}
|
|
33
37
|
};
|
|
34
38
|
this.ws.onclose = () => {
|
|
35
|
-
console.error("
|
|
39
|
+
console.error("WebSocketClient:onclose");
|
|
40
|
+
if (this.onDisconnectCallback) {
|
|
41
|
+
this.onDisconnectCallback();
|
|
42
|
+
}
|
|
36
43
|
this.reconnect();
|
|
37
44
|
};
|
|
38
45
|
}
|
|
39
46
|
disconnect() {
|
|
47
|
+
console.log("WebSocketClient:disconnect");
|
|
40
48
|
this.ws?.close();
|
|
41
49
|
this.ws = null;
|
|
50
|
+
this.isConnected = false;
|
|
42
51
|
}
|
|
43
52
|
subscribe(topic) {
|
|
53
|
+
console.log("WebSocketClient:subscribe");
|
|
44
54
|
const message = {
|
|
45
55
|
clientId: this.clientId,
|
|
46
56
|
type: "subscribe",
|
|
@@ -49,20 +59,29 @@ var WebSocketClientImpl = class {
|
|
|
49
59
|
this.ws?.send(JSON.stringify(message));
|
|
50
60
|
}
|
|
51
61
|
unsubscribe(topic) {
|
|
62
|
+
console.log("WebSocketClient:unsubscribe");
|
|
52
63
|
const message = {
|
|
53
64
|
clientId: this.clientId,
|
|
54
65
|
type: "unsubscribe",
|
|
55
66
|
topic
|
|
56
67
|
};
|
|
68
|
+
this.ws?.send(JSON.stringify(message));
|
|
57
69
|
}
|
|
58
70
|
onConnect(callback) {
|
|
59
71
|
this.onConnectCallback = callback;
|
|
60
72
|
}
|
|
73
|
+
onDisconnect(callback) {
|
|
74
|
+
this.onDisconnectCallback = callback;
|
|
75
|
+
}
|
|
61
76
|
onMessage(callback) {
|
|
62
77
|
this.onMessageCallback = callback;
|
|
63
78
|
}
|
|
64
79
|
reconnect() {
|
|
65
|
-
console.log("
|
|
80
|
+
console.log("WebSocketClient:reconnect");
|
|
81
|
+
if (this.isConnected && this.onDisconnectCallback) {
|
|
82
|
+
this.onDisconnectCallback();
|
|
83
|
+
}
|
|
84
|
+
this.isConnected = false;
|
|
66
85
|
const delay = Math.min(1e3 * Math.pow(2, this.reconnectAttempts), 1e4);
|
|
67
86
|
this.reconnectAttempts++;
|
|
68
87
|
setTimeout(() => {
|
|
@@ -32,20 +32,24 @@ var WebSocketClientImpl = class {
|
|
|
32
32
|
this.accessToken = accessToken;
|
|
33
33
|
this.ws = null;
|
|
34
34
|
this.onConnectCallback = null;
|
|
35
|
+
this.onDisconnectCallback = null;
|
|
35
36
|
this.onMessageCallback = null;
|
|
36
37
|
this.reconnectAttempts = 0;
|
|
38
|
+
this.isConnected = false;
|
|
37
39
|
}
|
|
38
40
|
connect() {
|
|
39
41
|
this.ws = new WebSocket(this.url);
|
|
40
42
|
this.ws.onopen = () => {
|
|
43
|
+
console.log("WebSocketClient:onopen");
|
|
44
|
+
this.isConnected = true;
|
|
41
45
|
this.reconnectAttempts = 0;
|
|
42
46
|
if (this.onConnectCallback) {
|
|
43
47
|
this.onConnectCallback();
|
|
44
48
|
}
|
|
45
49
|
};
|
|
46
50
|
this.ws.onerror = (error) => {
|
|
47
|
-
console.error("
|
|
48
|
-
this.
|
|
51
|
+
console.error("WebSocketClient:onerror", error);
|
|
52
|
+
this.disconnect();
|
|
49
53
|
};
|
|
50
54
|
this.ws.onmessage = (event) => {
|
|
51
55
|
if (this.onMessageCallback) {
|
|
@@ -53,20 +57,26 @@ var WebSocketClientImpl = class {
|
|
|
53
57
|
const message = JSON.parse(event.data);
|
|
54
58
|
this.onMessageCallback(message);
|
|
55
59
|
} catch (error) {
|
|
56
|
-
console.error("
|
|
60
|
+
console.error("WebSocketClient:onmessage", error);
|
|
57
61
|
}
|
|
58
62
|
}
|
|
59
63
|
};
|
|
60
64
|
this.ws.onclose = () => {
|
|
61
|
-
console.error("
|
|
65
|
+
console.error("WebSocketClient:onclose");
|
|
66
|
+
if (this.onDisconnectCallback) {
|
|
67
|
+
this.onDisconnectCallback();
|
|
68
|
+
}
|
|
62
69
|
this.reconnect();
|
|
63
70
|
};
|
|
64
71
|
}
|
|
65
72
|
disconnect() {
|
|
73
|
+
console.log("WebSocketClient:disconnect");
|
|
66
74
|
this.ws?.close();
|
|
67
75
|
this.ws = null;
|
|
76
|
+
this.isConnected = false;
|
|
68
77
|
}
|
|
69
78
|
subscribe(topic) {
|
|
79
|
+
console.log("WebSocketClient:subscribe");
|
|
70
80
|
const message = {
|
|
71
81
|
clientId: this.clientId,
|
|
72
82
|
type: "subscribe",
|
|
@@ -75,20 +85,29 @@ var WebSocketClientImpl = class {
|
|
|
75
85
|
this.ws?.send(JSON.stringify(message));
|
|
76
86
|
}
|
|
77
87
|
unsubscribe(topic) {
|
|
88
|
+
console.log("WebSocketClient:unsubscribe");
|
|
78
89
|
const message = {
|
|
79
90
|
clientId: this.clientId,
|
|
80
91
|
type: "unsubscribe",
|
|
81
92
|
topic
|
|
82
93
|
};
|
|
94
|
+
this.ws?.send(JSON.stringify(message));
|
|
83
95
|
}
|
|
84
96
|
onConnect(callback) {
|
|
85
97
|
this.onConnectCallback = callback;
|
|
86
98
|
}
|
|
99
|
+
onDisconnect(callback) {
|
|
100
|
+
this.onDisconnectCallback = callback;
|
|
101
|
+
}
|
|
87
102
|
onMessage(callback) {
|
|
88
103
|
this.onMessageCallback = callback;
|
|
89
104
|
}
|
|
90
105
|
reconnect() {
|
|
91
|
-
console.log("
|
|
106
|
+
console.log("WebSocketClient:reconnect");
|
|
107
|
+
if (this.isConnected && this.onDisconnectCallback) {
|
|
108
|
+
this.onDisconnectCallback();
|
|
109
|
+
}
|
|
110
|
+
this.isConnected = false;
|
|
92
111
|
const delay = Math.min(1e3 * Math.pow(2, this.reconnectAttempts), 1e4);
|
|
93
112
|
this.reconnectAttempts++;
|
|
94
113
|
setTimeout(() => {
|
|
@@ -6,20 +6,24 @@ var WebSocketClientImpl = class {
|
|
|
6
6
|
this.accessToken = accessToken;
|
|
7
7
|
this.ws = null;
|
|
8
8
|
this.onConnectCallback = null;
|
|
9
|
+
this.onDisconnectCallback = null;
|
|
9
10
|
this.onMessageCallback = null;
|
|
10
11
|
this.reconnectAttempts = 0;
|
|
12
|
+
this.isConnected = false;
|
|
11
13
|
}
|
|
12
14
|
connect() {
|
|
13
15
|
this.ws = new WebSocket(this.url);
|
|
14
16
|
this.ws.onopen = () => {
|
|
17
|
+
console.log("WebSocketClient:onopen");
|
|
18
|
+
this.isConnected = true;
|
|
15
19
|
this.reconnectAttempts = 0;
|
|
16
20
|
if (this.onConnectCallback) {
|
|
17
21
|
this.onConnectCallback();
|
|
18
22
|
}
|
|
19
23
|
};
|
|
20
24
|
this.ws.onerror = (error) => {
|
|
21
|
-
console.error("
|
|
22
|
-
this.
|
|
25
|
+
console.error("WebSocketClient:onerror", error);
|
|
26
|
+
this.disconnect();
|
|
23
27
|
};
|
|
24
28
|
this.ws.onmessage = (event) => {
|
|
25
29
|
if (this.onMessageCallback) {
|
|
@@ -27,20 +31,26 @@ var WebSocketClientImpl = class {
|
|
|
27
31
|
const message = JSON.parse(event.data);
|
|
28
32
|
this.onMessageCallback(message);
|
|
29
33
|
} catch (error) {
|
|
30
|
-
console.error("
|
|
34
|
+
console.error("WebSocketClient:onmessage", error);
|
|
31
35
|
}
|
|
32
36
|
}
|
|
33
37
|
};
|
|
34
38
|
this.ws.onclose = () => {
|
|
35
|
-
console.error("
|
|
39
|
+
console.error("WebSocketClient:onclose");
|
|
40
|
+
if (this.onDisconnectCallback) {
|
|
41
|
+
this.onDisconnectCallback();
|
|
42
|
+
}
|
|
36
43
|
this.reconnect();
|
|
37
44
|
};
|
|
38
45
|
}
|
|
39
46
|
disconnect() {
|
|
47
|
+
console.log("WebSocketClient:disconnect");
|
|
40
48
|
this.ws?.close();
|
|
41
49
|
this.ws = null;
|
|
50
|
+
this.isConnected = false;
|
|
42
51
|
}
|
|
43
52
|
subscribe(topic) {
|
|
53
|
+
console.log("WebSocketClient:subscribe");
|
|
44
54
|
const message = {
|
|
45
55
|
clientId: this.clientId,
|
|
46
56
|
type: "subscribe",
|
|
@@ -49,20 +59,29 @@ var WebSocketClientImpl = class {
|
|
|
49
59
|
this.ws?.send(JSON.stringify(message));
|
|
50
60
|
}
|
|
51
61
|
unsubscribe(topic) {
|
|
62
|
+
console.log("WebSocketClient:unsubscribe");
|
|
52
63
|
const message = {
|
|
53
64
|
clientId: this.clientId,
|
|
54
65
|
type: "unsubscribe",
|
|
55
66
|
topic
|
|
56
67
|
};
|
|
68
|
+
this.ws?.send(JSON.stringify(message));
|
|
57
69
|
}
|
|
58
70
|
onConnect(callback) {
|
|
59
71
|
this.onConnectCallback = callback;
|
|
60
72
|
}
|
|
73
|
+
onDisconnect(callback) {
|
|
74
|
+
this.onDisconnectCallback = callback;
|
|
75
|
+
}
|
|
61
76
|
onMessage(callback) {
|
|
62
77
|
this.onMessageCallback = callback;
|
|
63
78
|
}
|
|
64
79
|
reconnect() {
|
|
65
|
-
console.log("
|
|
80
|
+
console.log("WebSocketClient:reconnect");
|
|
81
|
+
if (this.isConnected && this.onDisconnectCallback) {
|
|
82
|
+
this.onDisconnectCallback();
|
|
83
|
+
}
|
|
84
|
+
this.isConnected = false;
|
|
66
85
|
const delay = Math.min(1e3 * Math.pow(2, this.reconnectAttempts), 1e4);
|
|
67
86
|
this.reconnectAttempts++;
|
|
68
87
|
setTimeout(() => {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "stayge-ws-client-sdk",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"description": "Stayge WebSocket Client SDK",
|
|
5
5
|
"main": "dist/index.cjs",
|
|
6
6
|
"module": "dist/index.mjs",
|
|
@@ -30,4 +30,4 @@
|
|
|
30
30
|
"tsup": "^7.2.0",
|
|
31
31
|
"typescript": "^5.3.0"
|
|
32
32
|
}
|
|
33
|
-
}
|
|
33
|
+
}
|
|
@@ -16,5 +16,6 @@ export interface WebSocketClient {
|
|
|
16
16
|
subscribe(topic: string): void;
|
|
17
17
|
unsubscribe(topic: string): void;
|
|
18
18
|
onConnect(callback: () => void): void;
|
|
19
|
+
onDisconnect(callback: () => void): void;
|
|
19
20
|
onMessage(callback: (message: MessageFromServer) => void): void;
|
|
20
21
|
}
|
|
@@ -7,9 +7,12 @@ import {
|
|
|
7
7
|
export class WebSocketClientImpl implements WebSocketClient {
|
|
8
8
|
private ws: WebSocket | null = null;
|
|
9
9
|
private onConnectCallback: (() => void) | null = null;
|
|
10
|
+
private onDisconnectCallback: (() => void) | null = null;
|
|
10
11
|
private onMessageCallback: ((message: MessageFromServer) => void) | null =
|
|
11
12
|
null;
|
|
12
13
|
private reconnectAttempts = 0;
|
|
14
|
+
private isConnected = false;
|
|
15
|
+
|
|
13
16
|
constructor(
|
|
14
17
|
private url: string,
|
|
15
18
|
private clientId: string,
|
|
@@ -20,15 +23,18 @@ export class WebSocketClientImpl implements WebSocketClient {
|
|
|
20
23
|
this.ws = new WebSocket(this.url);
|
|
21
24
|
|
|
22
25
|
this.ws.onopen = () => {
|
|
26
|
+
console.log("WebSocketClient:onopen");
|
|
27
|
+
this.isConnected = true;
|
|
23
28
|
this.reconnectAttempts = 0;
|
|
29
|
+
|
|
24
30
|
if (this.onConnectCallback) {
|
|
25
31
|
this.onConnectCallback();
|
|
26
32
|
}
|
|
27
33
|
};
|
|
28
34
|
|
|
29
35
|
this.ws.onerror = (error) => {
|
|
30
|
-
console.error("
|
|
31
|
-
this.
|
|
36
|
+
console.error("WebSocketClient:onerror", error);
|
|
37
|
+
this.disconnect();
|
|
32
38
|
};
|
|
33
39
|
|
|
34
40
|
this.ws.onmessage = (event) => {
|
|
@@ -37,23 +43,30 @@ export class WebSocketClientImpl implements WebSocketClient {
|
|
|
37
43
|
const message = JSON.parse(event.data) as MessageFromServer;
|
|
38
44
|
this.onMessageCallback(message);
|
|
39
45
|
} catch (error) {
|
|
40
|
-
console.error("
|
|
46
|
+
console.error("WebSocketClient:onmessage", error);
|
|
41
47
|
}
|
|
42
48
|
}
|
|
43
49
|
};
|
|
44
50
|
|
|
45
51
|
this.ws.onclose = () => {
|
|
46
|
-
console.error("
|
|
52
|
+
console.error("WebSocketClient:onclose");
|
|
53
|
+
if (this.onDisconnectCallback) {
|
|
54
|
+
this.onDisconnectCallback();
|
|
55
|
+
}
|
|
56
|
+
|
|
47
57
|
this.reconnect();
|
|
48
58
|
};
|
|
49
59
|
}
|
|
50
60
|
|
|
51
61
|
disconnect() {
|
|
62
|
+
console.log("WebSocketClient:disconnect");
|
|
52
63
|
this.ws?.close();
|
|
53
64
|
this.ws = null;
|
|
65
|
+
this.isConnected = false;
|
|
54
66
|
}
|
|
55
67
|
|
|
56
68
|
subscribe(topic: string) {
|
|
69
|
+
console.log("WebSocketClient:subscribe");
|
|
57
70
|
const message: MessageToServer = {
|
|
58
71
|
clientId: this.clientId,
|
|
59
72
|
type: "subscribe",
|
|
@@ -63,23 +76,34 @@ export class WebSocketClientImpl implements WebSocketClient {
|
|
|
63
76
|
}
|
|
64
77
|
|
|
65
78
|
unsubscribe(topic: string) {
|
|
79
|
+
console.log("WebSocketClient:unsubscribe");
|
|
66
80
|
const message: MessageToServer = {
|
|
67
81
|
clientId: this.clientId,
|
|
68
82
|
type: "unsubscribe",
|
|
69
83
|
topic,
|
|
70
84
|
};
|
|
85
|
+
this.ws?.send(JSON.stringify(message));
|
|
71
86
|
}
|
|
72
87
|
|
|
73
88
|
onConnect(callback: () => void) {
|
|
74
89
|
this.onConnectCallback = callback;
|
|
75
90
|
}
|
|
76
91
|
|
|
92
|
+
onDisconnect(callback: () => void) {
|
|
93
|
+
this.onDisconnectCallback = callback;
|
|
94
|
+
}
|
|
95
|
+
|
|
77
96
|
onMessage(callback: (message: MessageFromServer) => void) {
|
|
78
97
|
this.onMessageCallback = callback;
|
|
79
98
|
}
|
|
80
99
|
|
|
81
100
|
private reconnect() {
|
|
82
|
-
console.log("
|
|
101
|
+
console.log("WebSocketClient:reconnect");
|
|
102
|
+
if (this.isConnected && this.onDisconnectCallback) {
|
|
103
|
+
this.onDisconnectCallback();
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
this.isConnected = false;
|
|
83
107
|
|
|
84
108
|
// exponential backoff
|
|
85
109
|
const delay = Math.min(1000 * Math.pow(2, this.reconnectAttempts), 10000);
|