Skip to content

Commit a722a19

Browse files
committed
fix: mitigate reconnect loop
1 parent 8daa6b0 commit a722a19

File tree

1 file changed

+21
-23
lines changed

1 file changed

+21
-23
lines changed

lib/src/core/engine.dart

Lines changed: 21 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -323,22 +323,7 @@ class Engine extends Disposable with EventsEmittable<EngineEvent> {
323323
if (_subscriberPrimary) {
324324
// make sure publisher transport is connected
325325

326-
if ((await publisher?.pc.getConnectionState())?.isConnected() != true) {
327-
logger.fine('Publisher is not connected...');
328-
329-
// start negotiation
330-
if (await publisher?.pc.getConnectionState() !=
331-
rtc.RTCPeerConnectionState.RTCPeerConnectionStateConnecting) {
332-
await negotiate();
333-
}
334-
if (!lkPlatformIsTest()) {
335-
logger.fine('Waiting for publisher to ice-connect...');
336-
await events.waitFor<EnginePublisherPeerStateUpdatedEvent>(
337-
filter: (event) => event.state.isConnected(),
338-
duration: connectOptions.timeouts.peerConnection,
339-
);
340-
}
341-
}
326+
await _publisherEnsureConnected();
342327

343328
// wait for data channel to open (if not already)
344329
if (_publisherDataChannelState(reliabilityType) !=
@@ -367,6 +352,25 @@ class Engine extends Disposable with EventsEmittable<EngineEvent> {
367352
channel.bufferedAmountLowThreshold!;
368353
}
369354

355+
Future<void> _publisherEnsureConnected() async {
356+
if ((await publisher?.pc.getConnectionState())?.isConnected() != true) {
357+
logger.fine('Publisher is not connected...');
358+
359+
// start negotiation
360+
if (await publisher?.pc.getConnectionState() !=
361+
rtc.RTCPeerConnectionState.RTCPeerConnectionStateConnecting) {
362+
await negotiate();
363+
}
364+
if (!lkPlatformIsTest()) {
365+
logger.fine('Waiting for publisher to ice-connect...');
366+
await events.waitFor<EnginePublisherPeerStateUpdatedEvent>(
367+
filter: (event) => event.state.isConnected(),
368+
duration: connectOptions.timeouts.peerConnection,
369+
);
370+
}
371+
}
372+
}
373+
370374
Future<RTCConfiguration> _buildRtcConfiguration(
371375
{required lk_models.ClientConfigSetting serverResponseForceRelay,
372376
required List<RTCIceServer> serverProvidedIceServers}) async {
@@ -896,13 +900,7 @@ class Engine extends Disposable with EventsEmittable<EngineEvent> {
896900
);
897901

898902
if (_hasPublished) {
899-
await negotiate();
900-
logger
901-
.fine('restartConnection: Waiting for publisher to ice-connect...');
902-
await events.waitFor<EnginePublisherPeerStateUpdatedEvent>(
903-
filter: (event) => event.state.isConnected(),
904-
duration: connectOptions.timeouts.peerConnection,
905-
);
903+
await _publisherEnsureConnected();
906904
}
907905
fullReconnectOnNext = false;
908906
_regionUrlProvider?.resetAttempts();

0 commit comments

Comments
 (0)