@livedigital/client 3.44.2 → 3.44.4

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
@@ -2,7 +2,7 @@
2
2
  "name": "@livedigital/client",
3
3
  "author": "vlprojects",
4
4
  "license": "MIT",
5
- "version": "3.44.2",
5
+ "version": "3.44.4",
6
6
  "private": false,
7
7
  "bugs": {
8
8
  "url": "https://github.com/vlprojects/livedigital-sdk/issues"
@@ -76,7 +76,7 @@ class Engine {
76
76
  private readonly mark = randomString();
77
77
 
78
78
  private readonly handleSignalingError = (error: Error): void => {
79
- if (this.isReleasing) {
79
+ if (this.isReleasing || !this.isChannelJoined || this.state.isChannelJoining) {
80
80
  return;
81
81
  }
82
82
 
@@ -135,7 +135,6 @@ class Engine {
135
135
  const [sendTransport, recvTransport] = await Promise.all([
136
136
  this.network.createSendTransport(this.media.mediasoupDevice),
137
137
  this.network.createRecvTransport(this.media.mediasoupDevice),
138
- // @INFO: un-comment to enable signaling tcp transport connection
139
138
  this.network.createSignalingTransport(this.media.mediasoupDevice),
140
139
  ]);
141
140
 
@@ -160,9 +159,8 @@ class Engine {
160
159
  recvTransportId: this.network.receiveTransport?.id,
161
160
  });
162
161
 
163
- // @INFO: un-comment to enable signaling tcp transport connection
164
- // @WARN: must be non-blocking, no await
165
- await this.network.createSignalingConsumer();
162
+ await this.network.createHeartbeatProducer();
163
+ await this.network.createKeepAliveConsumer();
166
164
  } catch (error: unknown) {
167
165
  this.#logger.error('initialize()', { error });
168
166
 
@@ -194,6 +192,7 @@ class Engine {
194
192
  this.state.reset();
195
193
  this.myPeer.delete();
196
194
  this.webRtcIssueDetector?.stopWatchingNewPeerConnections();
195
+
197
196
  await this.peers.reset();
198
197
 
199
198
  this.network.closeSendTransport();
@@ -212,18 +211,8 @@ class Engine {
212
211
 
213
212
  this.removeClientEventEmitterListeners();
214
213
 
215
- if (this.isChannelJoined) {
216
- try {
217
- await this.signalingApiClient.peers.disconnectPeer();
218
- } catch (error: unknown) {
219
- this.#logger.debug('failed to disconnect peer', {
220
- peerId: this.myPeerId,
221
- error: serializeError(error),
222
- });
223
- }
224
- }
225
-
226
214
  this.network.reset();
215
+ await this.signalingApiClient.peers.disconnectPeer();
227
216
  clientMetaProvider.clear();
228
217
  this.transportsStatsProvider.clear();
229
218
  this.statsHandler.clear();
@@ -232,6 +221,7 @@ class Engine {
232
221
  });
233
222
  } catch (error: unknown) {
234
223
  this.#logger.error('release()', { error });
224
+ throw new Error('Error release engine');
235
225
  } finally {
236
226
  this.isReleasing = false;
237
227
  }
@@ -675,7 +665,7 @@ class Engine {
675
665
  }
676
666
 
677
667
  private triggerRejoinEventIfAppropriate(reason?: string): void {
678
- if (this.rejoinRequested && !this.state.isChannelJoining) {
668
+ if (!this.isChannelJoined || this.isReleasing || this.state.isChannelJoining || this.rejoinRequested) {
679
669
  return;
680
670
  }
681
671
 
@@ -62,7 +62,7 @@ class Network {
62
62
 
63
63
  public receiveTransport?: Transport;
64
64
 
65
- public signalingDataProducer?: types.DataProducer;
65
+ public heartbeatDataProducer?: types.DataProducer;
66
66
 
67
67
  public signalingTransport?: Transport;
68
68
 
@@ -132,7 +132,7 @@ class Network {
132
132
 
133
133
  public reset(): void {
134
134
  this.signalingHeartbeater.dispose();
135
- this.signalingDataProducer = undefined;
135
+ this.heartbeatDataProducer = undefined;
136
136
  this.stopRestartIceAttempts();
137
137
  this.removeEventListeners();
138
138
  }
@@ -333,12 +333,12 @@ class Network {
333
333
  };
334
334
  }
335
335
 
336
- async createSignalingConsumer(): Promise<void> {
337
- const transport = this.signalingTransport;
336
+ async createHeartbeatProducer(): Promise<void> {
337
+ const transport = this.sendTransport;
338
338
 
339
339
  if (!transport) {
340
- this.#logger.error('createSignalingConsumer()', { reason: 'missing signaling transport' });
341
- throw new Error('Failed to create data consumer');
340
+ this.#logger.error('createHeartbeatProducer()', { reason: 'missing send transport' });
341
+ throw new Error('Failed to create data producer');
342
342
  }
343
343
 
344
344
  const dataProducer = await transport.produceData({
@@ -346,17 +346,41 @@ class Network {
346
346
  protocol: 'heartbeat',
347
347
  });
348
348
 
349
- this.signalingDataProducer = dataProducer;
349
+ this.heartbeatDataProducer = dataProducer;
350
350
 
351
351
  dataProducer.once('transportclose', () => {
352
- this.signalingDataProducer?.close();
353
- this.signalingDataProducer = undefined;
352
+ this.heartbeatDataProducer?.close();
353
+ this.heartbeatDataProducer = undefined;
354
354
  this.signalingHeartbeater.dispose();
355
355
  });
356
356
 
357
357
  this.signalingHeartbeater.init(transport, dataProducer);
358
358
  }
359
359
 
360
+ // only for tcp transport connection
361
+ async createKeepAliveConsumer(): Promise<void> {
362
+ const transport = this.signalingTransport;
363
+
364
+ if (!transport) {
365
+ this.#logger.error('createKeepAliveConsumer()', { reason: 'missing signaling transport' });
366
+
367
+ return;
368
+ }
369
+
370
+ const dataProducer = await transport.produceData({
371
+ label: 'consumers-scores',
372
+ protocol: 'keepalive',
373
+ });
374
+
375
+ dataProducer.once('open', () => {
376
+ dataProducer.send(new Uint8Array(0));
377
+ });
378
+
379
+ dataProducer.once('transportclose', () => {
380
+ dataProducer.close();
381
+ });
382
+ }
383
+
360
384
  get channelMessagesDataConsumer(): types.DataConsumer | undefined {
361
385
  return this.dataChannelsManager.channelMessagesDataConsumer;
362
386
  }