@@ -121,20 +121,19 @@ class Engine extends Disposable with EventsEmittable<EngineEvent> {
121121
122122 late EventsListener <SignalEvent > _signalListener = signalClient.createListener (synchronized: true );
123123
124- int ? reconnectAttempts;
125-
126- Timer ? reconnectTimeout;
127- DateTime ? reconnectStart;
124+ int _reconnectAttempts = 0 ;
125+ Timer ? _reconnectTimeout;
126+ DateTime ? _reconnectStart;
128127
129128 bool _isClosed = false ;
130129
131130 bool get isClosed => _isClosed;
132131
133- bool get isPendingReconnect => reconnectStart != null && reconnectTimeout != null ;
132+ bool get isPendingReconnect => _reconnectStart != null && _reconnectTimeout != null ;
134133
135134 final int _reconnectCount = defaultRetryDelaysInMs.length;
136135
137- bool attemptingReconnect = false ;
136+ bool _attemptingReconnect = false ;
138137
139138 RegionUrlProvider ? _regionUrlProvider;
140139
@@ -179,17 +178,17 @@ class Engine extends Disposable with EventsEmittable<EngineEvent> {
179178 return null ;
180179 }
181180
182- void clearReconnectTimeout () {
183- if (reconnectTimeout != null ) {
184- reconnectTimeout ? .cancel ();
185- reconnectTimeout = null ;
181+ void _clearReconnectTimeout () {
182+ if (_reconnectTimeout != null ) {
183+ _reconnectTimeout ? .cancel ();
184+ _reconnectTimeout = null ;
186185 }
187186 }
188187
189- void clearPendingReconnect () {
190- clearReconnectTimeout ();
191- reconnectAttempts = 0 ;
192- reconnectStart = null ;
188+ void _clearPendingReconnect () {
189+ _clearReconnectTimeout ();
190+ _reconnectAttempts = 0 ;
191+ _reconnectStart = null ;
193192 }
194193
195194 Engine ({
@@ -290,15 +289,15 @@ class Engine extends Disposable with EventsEmittable<EngineEvent> {
290289 await signalClient.cleanUp ();
291290
292291 fullReconnectOnNext = false ;
293- attemptingReconnect = false ;
292+ _attemptingReconnect = false ;
294293
295294 // Reset reliability state
296295 _reliableDataSequence = 1 ;
297296 _reliableMessageBuffer.clear ();
298297 _reliableReceivedState.clear ();
299298 _isReconnecting = false ;
300299
301- clearPendingReconnect ();
300+ _clearPendingReconnect ();
302301 }
303302
304303 @internal
@@ -357,7 +356,7 @@ class Engine extends Disposable with EventsEmittable<EngineEvent> {
357356
358357 events.once <EngineClosingEvent >((e) => onClosing ());
359358
360- while (! _dcBufferStatus[kind]! ) {
359+ while (! completer.isCompleted && ! _dcBufferStatus[kind]! ) {
361360 await Future .delayed (const Duration (milliseconds: 10 ));
362361 }
363362 if (completer.isCompleted) {
@@ -725,7 +724,7 @@ class Engine extends Disposable with EventsEmittable<EngineEvent> {
725724 signalClient.connectionState == ConnectionState .connecting) {
726725 final track = event.track;
727726 final receiver = event.receiver;
728- events.on < EngineConnectedEvent > ((event) async {
727+ events.once <EngineConnectedEvent >((event) async {
729728 Timer (const Duration (milliseconds: 10 ), () {
730729 events.emit (EngineTrackAddedEvent (
731730 track: track,
@@ -829,7 +828,7 @@ class Engine extends Disposable with EventsEmittable<EngineEvent> {
829828
830829 Future <void > _handleGettingConnectedServerAddress (rtc.RTCPeerConnection pc) async {
831830 try {
832- final remoteAddress = await getConnectedAddress (publisher ! . pc);
831+ final remoteAddress = await getConnectedAddress (pc);
833832 logger.fine ('Connected address: $remoteAddress ' );
834833 if (_connectedServerAddress == null || _connectedServerAddress != remoteAddress) {
835834 _connectedServerAddress = remoteAddress;
@@ -999,11 +998,11 @@ class Engine extends Disposable with EventsEmittable<EngineEvent> {
999998
1000999 _isReconnecting = true ;
10011000
1002- if (reconnectAttempts == 0 ) {
1003- reconnectStart = DateTime .timestamp ();
1001+ if (_reconnectAttempts == 0 ) {
1002+ _reconnectStart = DateTime .timestamp ();
10041003 }
10051004
1006- if (reconnectAttempts ! >= _reconnectCount) {
1005+ if (_reconnectAttempts >= _reconnectCount) {
10071006 logger.fine ('reconnectAttempts exceeded, disconnecting...' );
10081007 _isClosed = true ;
10091008 await cleanUp ();
@@ -1014,26 +1013,26 @@ class Engine extends Disposable with EventsEmittable<EngineEvent> {
10141013 return ;
10151014 }
10161015
1017- var delay = defaultRetryDelaysInMs[reconnectAttempts ! ];
1016+ var delay = defaultRetryDelaysInMs[_reconnectAttempts ];
10181017 // Add random jitter to prevent thundering herd on reconnect
1019- if (reconnectAttempts ! > 1 ) {
1018+ if (_reconnectAttempts > 1 ) {
10201019 delay += math.Random ().nextInt (1000 );
10211020 }
10221021
10231022 events.emit (EngineAttemptReconnectEvent (
1024- attempt: reconnectAttempts ! + 1 ,
1023+ attempt: _reconnectAttempts + 1 ,
10251024 maxAttempts: _reconnectCount,
10261025 nextRetryDelaysInMs: delay,
10271026 ));
10281027
1029- clearReconnectTimeout ();
1028+ _clearReconnectTimeout ();
10301029 if (token != null && _regionUrlProvider != null ) {
10311030 // token may have been refreshed, we do not want to recreate the regionUrlProvider
10321031 // since the current engine may have inherited a regional url
10331032 _regionUrlProvider! .updateToken (token! );
10341033 }
1035- logger.fine ('WebSocket reconnecting in $delay ms, retry times $reconnectAttempts ' );
1036- reconnectTimeout = Timer (Duration (milliseconds: delay), () async {
1034+ logger.fine ('WebSocket reconnecting in $delay ms, retry times $_reconnectAttempts ' );
1035+ _reconnectTimeout = Timer (Duration (milliseconds: delay), () async {
10371036 await attemptReconnect (
10381037 reason,
10391038 reconnectReason: reconnectReason,
@@ -1051,7 +1050,7 @@ class Engine extends Disposable with EventsEmittable<EngineEvent> {
10511050 }
10521051
10531052 // guard for attempting reconnection multiple times while one attempt is still not finished
1054- if (attemptingReconnect ) {
1053+ if (_attemptingReconnect ) {
10551054 return ;
10561055 }
10571056
@@ -1065,7 +1064,7 @@ class Engine extends Disposable with EventsEmittable<EngineEvent> {
10651064 }
10661065
10671066 try {
1068- attemptingReconnect = true ;
1067+ _attemptingReconnect = true ;
10691068
10701069 if (await signalClient.networkIsAvailable () == false ) {
10711070 logger.fine ('no internet connection, waiting...' );
@@ -1086,11 +1085,11 @@ class Engine extends Disposable with EventsEmittable<EngineEvent> {
10861085 reconnectReason: reconnectReason,
10871086 );
10881087 }
1089- clearPendingReconnect ();
1090- attemptingReconnect = false ;
1088+ _clearPendingReconnect ();
1089+ _attemptingReconnect = false ;
10911090 _isReconnecting = false ;
10921091 } catch (e) {
1093- reconnectAttempts = reconnectAttempts ! + 1 ;
1092+ _reconnectAttempts = _reconnectAttempts + 1 ;
10941093 bool recoverable = true ;
10951094 if (e is WebSocketException || e is MediaConnectException ) {
10961095 // cannot resume connection, need to do full reconnect
@@ -1111,7 +1110,7 @@ class Engine extends Disposable with EventsEmittable<EngineEvent> {
11111110 await cleanUp ();
11121111 }
11131112 } finally {
1114- attemptingReconnect = false ;
1113+ _attemptingReconnect = false ;
11151114 }
11161115 }
11171116
@@ -1230,7 +1229,7 @@ class Engine extends Disposable with EventsEmittable<EngineEvent> {
12301229 }
12311230
12321231 @internal
1233- void sendSyncState ({
1232+ Future < void > sendSyncState ({
12341233 required lk_rtc.UpdateSubscription subscription,
12351234 required Iterable <lk_rtc.TrackPublishedResponse >? publishTracks,
12361235 required List <String > trackSidsDisabled,
@@ -1281,7 +1280,7 @@ class Engine extends Disposable with EventsEmittable<EngineEvent> {
12811280 logger.fine ('onConnected subscriberPrimary: ${_subscriberPrimary }, '
12821281 'serverVersion: ${event .response .serverVersion }, '
12831282 'iceServers: ${event .response .iceServers }, '
1284- 'forceRelay: $event .response.clientConfiguration.forceRelay' );
1283+ 'forceRelay: ${ event .response .clientConfiguration .forceRelay } ' );
12851284
12861285 final rtcConfiguration = await _buildRtcConfiguration (
12871286 serverResponseForceRelay: event.response.clientConfiguration.forceRelay,
@@ -1313,7 +1312,7 @@ class Engine extends Disposable with EventsEmittable<EngineEvent> {
13131312
13141313 logger.fine ('Handle ReconnectResponse: '
13151314 'iceServers: ${event .response .iceServers }, '
1316- 'forceRelay: $event .response.clientConfiguration.forceRelay, '
1315+ 'forceRelay: ${ event .response .clientConfiguration .forceRelay } , '
13171316 'lastMessageSeq: ${event .response .lastMessageSeq }' );
13181317
13191318 final rtcConfiguration = await _buildRtcConfiguration (
@@ -1336,7 +1335,7 @@ class Engine extends Disposable with EventsEmittable<EngineEvent> {
13361335 })
13371336 ..on < SignalConnectedEvent > ((event) async {
13381337 logger.fine ('Signal connected' );
1339- reconnectAttempts = 0 ;
1338+ _reconnectAttempts = 0 ;
13401339 events.emit (const EngineConnectedEvent ());
13411340 })
13421341 ..on < SignalConnectingEvent > ((event) async {
@@ -1456,7 +1455,7 @@ class Engine extends Disposable with EventsEmittable<EngineEvent> {
14561455 logger.fine ('disconnect: Cancel the reconnection processing!' );
14571456 await signalClient.cleanUp ();
14581457 await _signalListener.cancelAll ();
1459- clearPendingReconnect ();
1458+ _clearPendingReconnect ();
14601459 }
14611460 await cleanUp ();
14621461 events.emit (EngineDisconnectedEvent (reason: reason));
0 commit comments