@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 CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@mixd-id/web-scaffold",
3
3
  "private": false,
4
- "version": "0.1.230406276",
4
+ "version": "0.1.230406278",
5
5
  "scripts": {
6
6
  "dev": "vite serve",
7
7
  "build": "vite build",
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
- const ping = async() => {
198
- socket.send(await this.toBinaryData({ ping:1 }))
199
- socket.pinging = true
200
-
201
- setTimeout(() => {
202
- if(socket.pinging){
203
- socket.close(1002, 'ping timeout')
204
- }
205
- else{
206
- setTimeout(ping, (Math.round(Math.random() * 10) % 5) * 5000)
207
- }
208
- }, 3000)
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
- reconnect ? this.emit('connect', true, []) : this.emit('connect', false, [])
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
- /*setTimeout(() => {
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 {