@mixd-id/web-scaffold 0.1.230406276 → 0.1.230406278
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/package.json +1 -1
- package/src/utils/wss.js +19 -14
- package/src/utils/wss.mjs +64 -9
package/package.json
CHANGED
package/src/utils/wss.js
CHANGED
|
@@ -138,11 +138,14 @@ class WSS extends EventEmitter2{
|
|
|
138
138
|
return socket.close(1002, e.message);
|
|
139
139
|
}
|
|
140
140
|
|
|
141
|
-
const { _requestId, path, params, pong } = obj
|
|
141
|
+
const { _requestId, path, params, ping, pong } = obj
|
|
142
142
|
|
|
143
143
|
if(pong){
|
|
144
144
|
delete socket.pinging
|
|
145
145
|
}
|
|
146
|
+
else if(ping){
|
|
147
|
+
socket.send(await this.toBinaryData({ pong: 1 }))
|
|
148
|
+
}
|
|
146
149
|
else{
|
|
147
150
|
let status = 200
|
|
148
151
|
let data
|
|
@@ -194,20 +197,22 @@ class WSS extends EventEmitter2{
|
|
|
194
197
|
return socket.close(1002, e.message);
|
|
195
198
|
}
|
|
196
199
|
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
socket.
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
200
|
+
if(this._opt.ping !== false){
|
|
201
|
+
const ping = async() => {
|
|
202
|
+
socket.send(await this.toBinaryData({ ping:1 }))
|
|
203
|
+
socket.pinging = true
|
|
204
|
+
|
|
205
|
+
setTimeout(() => {
|
|
206
|
+
if(socket.pinging){
|
|
207
|
+
socket.close(1002, 'ping timeout')
|
|
208
|
+
}
|
|
209
|
+
else{
|
|
210
|
+
setTimeout(ping, (Math.round(Math.random() * 10) % 5) * 5000)
|
|
211
|
+
}
|
|
212
|
+
}, 3000)
|
|
213
|
+
}
|
|
214
|
+
setTimeout(ping, (Math.round(Math.random() * 10) % 5) * 5000)
|
|
209
215
|
}
|
|
210
|
-
setTimeout(ping, (Math.round(Math.random() * 10) % 5) * 5000)
|
|
211
216
|
})
|
|
212
217
|
}
|
|
213
218
|
|
package/src/utils/wss.mjs
CHANGED
|
@@ -45,6 +45,7 @@ class WSS extends EventEmitter2{
|
|
|
45
45
|
_counter = 0
|
|
46
46
|
_callbacks = {}
|
|
47
47
|
_pendingSend = []
|
|
48
|
+
_pinging = false
|
|
48
49
|
|
|
49
50
|
constructor(opt) {
|
|
50
51
|
super();
|
|
@@ -58,6 +59,20 @@ class WSS extends EventEmitter2{
|
|
|
58
59
|
}, opt ?? {})
|
|
59
60
|
|
|
60
61
|
this.connect().then()
|
|
62
|
+
|
|
63
|
+
if(typeof window !== 'undefined'){
|
|
64
|
+
window.addEventListener('visibilitychange', () => {
|
|
65
|
+
if(document.visibilityState === 'visible'){
|
|
66
|
+
console.log('visibilitychange', this._instance.readyState)
|
|
67
|
+
this.emit('visibilitychange', this._instance.readyState, [])
|
|
68
|
+
|
|
69
|
+
this.ping().catch(e => {
|
|
70
|
+
console.log('ping error', e)
|
|
71
|
+
this.reconnect().then()
|
|
72
|
+
})
|
|
73
|
+
}
|
|
74
|
+
})
|
|
75
|
+
}
|
|
61
76
|
}
|
|
62
77
|
|
|
63
78
|
async fromBinaryData(binaryData){
|
|
@@ -87,17 +102,18 @@ class WSS extends EventEmitter2{
|
|
|
87
102
|
|
|
88
103
|
const obj = await this.fromBinaryData(event.data);
|
|
89
104
|
|
|
90
|
-
const { _requestId, status, data, auth, ping } = obj
|
|
105
|
+
const { _requestId, status, data, auth, ping, pong } = obj
|
|
91
106
|
|
|
92
107
|
if(ping){
|
|
93
108
|
this._instance.send(await this.toBinaryData({ pong:1 }))
|
|
94
109
|
}
|
|
110
|
+
else if(pong){
|
|
111
|
+
this._pinging = false
|
|
112
|
+
}
|
|
95
113
|
else if(auth){
|
|
96
114
|
this._instance.isAuth = auth
|
|
97
115
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
console.log('pendingSend', this._pendingSend)
|
|
116
|
+
this.emit('connect', reconnect, [])
|
|
101
117
|
|
|
102
118
|
for(let sendParams of this._pendingSend){
|
|
103
119
|
this.sendSync(sendParams.path, sendParams.params, sendParams.cb, sendParams.err)
|
|
@@ -143,6 +159,9 @@ class WSS extends EventEmitter2{
|
|
|
143
159
|
this.emit('connect_error', e, [])
|
|
144
160
|
break
|
|
145
161
|
|
|
162
|
+
case 1005:
|
|
163
|
+
break
|
|
164
|
+
|
|
146
165
|
default:
|
|
147
166
|
this.emit('disconnect', null, [])
|
|
148
167
|
break
|
|
@@ -162,7 +181,6 @@ class WSS extends EventEmitter2{
|
|
|
162
181
|
|
|
163
182
|
sendSync(path, params, cb, err, override){
|
|
164
183
|
if(this._instance.readyState > 1){
|
|
165
|
-
console.log('unable to send, ready state not 1', this._instance.readyState)
|
|
166
184
|
return
|
|
167
185
|
}
|
|
168
186
|
else if(!this._instance.isAuth){
|
|
@@ -195,14 +213,12 @@ class WSS extends EventEmitter2{
|
|
|
195
213
|
t1: new Date().getTime()
|
|
196
214
|
}
|
|
197
215
|
|
|
198
|
-
|
|
216
|
+
setTimeout(() => {
|
|
199
217
|
if(this._callbacks[_requestId]){
|
|
200
218
|
err({ message: 'Timeout' })
|
|
201
219
|
delete this._callbacks[_requestId]
|
|
202
|
-
|
|
203
|
-
this.reconnect()
|
|
204
220
|
}
|
|
205
|
-
}, (override ?? {}).timeout ?? this._opt.timeout)
|
|
221
|
+
}, (override ?? {}).timeout ?? this._opt.timeout)
|
|
206
222
|
})
|
|
207
223
|
}
|
|
208
224
|
|
|
@@ -212,6 +228,45 @@ class WSS extends EventEmitter2{
|
|
|
212
228
|
})
|
|
213
229
|
}
|
|
214
230
|
|
|
231
|
+
get readyState(){
|
|
232
|
+
const state = (this._instance ?? {}).readyState
|
|
233
|
+
|
|
234
|
+
if(state === 1 && !this._instance.isAuth){
|
|
235
|
+
return 0
|
|
236
|
+
}
|
|
237
|
+
if(!this._instance.isAuth)
|
|
238
|
+
return 0
|
|
239
|
+
return (this._instance ?? {}).readyState
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
async ping(timeout = 3000){
|
|
243
|
+
return new Promise(async (resolve, reject) => {
|
|
244
|
+
|
|
245
|
+
this._pinging = true
|
|
246
|
+
this._instance.send(await this.toBinaryData({ ping:1 }))
|
|
247
|
+
|
|
248
|
+
const t1 = new Date().getTime()
|
|
249
|
+
|
|
250
|
+
const pingCheck = () => {
|
|
251
|
+
if(!this._pinging){
|
|
252
|
+
resolve()
|
|
253
|
+
}
|
|
254
|
+
else{
|
|
255
|
+
const t2 = new Date().getTime()
|
|
256
|
+
|
|
257
|
+
if(t2 - t1 > timeout){
|
|
258
|
+
reject({ message: 'Ping timeout' })
|
|
259
|
+
}
|
|
260
|
+
else{
|
|
261
|
+
setTimeout(pingCheck, 100)
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
setTimeout(pingCheck, 100)
|
|
267
|
+
})
|
|
268
|
+
}
|
|
269
|
+
|
|
215
270
|
}
|
|
216
271
|
|
|
217
272
|
export {
|