From 5d6e304e40edb036a2fefa6fd51c4197b0a3865c Mon Sep 17 00:00:00 2001 From: Hiroshi Horie <548776+hiroshihorie@users.noreply.github.com> Date: Sat, 9 Apr 2022 01:34:26 +0900 Subject: [PATCH] Trigger reconnect on Publisher PC disconnect also (#105) * impl * clean up _hasPublished --- lib/src/core/engine.dart | 9 +++++---- lib/src/extensions.dart | 5 +++++ 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/lib/src/core/engine.dart b/lib/src/core/engine.dart index eb30984..c811743 100644 --- a/lib/src/core/engine.dart +++ b/lib/src/core/engine.dart @@ -139,6 +139,7 @@ class Engine extends Disposable with EventsEmittable { await publisher?.dispose(); publisher = null; + _hasPublished = false; await subscriber?.dispose(); subscriber = null; @@ -367,11 +368,11 @@ class Engine extends Disposable with EventsEmittable { )); events.on((event) { - // only listen to primary ice events - if (!event.isPrimary) return; + // + final isPrimaryOrPublisher = event.isPrimary || + (_hasPublished && event is EnginePublisherPeerStateUpdatedEvent); - if (event.state == - rtc.RTCPeerConnectionState.RTCPeerConnectionStateFailed) { + if (isPrimaryOrPublisher && event.state.isDisconnectedOrFailed()) { // trigger reconnect sequence _onDisconnected(DisconnectReason.peerConnection); } diff --git a/lib/src/extensions.dart b/lib/src/extensions.dart index 80ac9e2..69c30df 100644 --- a/lib/src/extensions.dart +++ b/lib/src/extensions.dart @@ -77,6 +77,11 @@ extension RTCIceCandidateExt on rtc.RTCIceCandidate { extension RTCPeerConnectionStateExt on rtc.RTCPeerConnectionState { bool isConnected() => this == rtc.RTCPeerConnectionState.RTCPeerConnectionStateConnected; + + bool isDisconnectedOrFailed() => [ + rtc.RTCPeerConnectionState.RTCPeerConnectionStateDisconnected, + rtc.RTCPeerConnectionState.RTCPeerConnectionStateFailed, + ].contains(this); } extension RTCIceTransportPolicyExt on RTCIceTransportPolicy {