@@ -327,7 +327,10 @@ class Engine extends Disposable with EventsEmittable<EngineEvent> {
327327 if (error is NegotiationError ) {
328328 fullReconnectOnNext = true ;
329329 }
330- await handleReconnect (ClientDisconnectReason .negotiationFailed);
330+ await handleReconnect (
331+ ClientDisconnectReason .negotiationFailed,
332+ reconnectReason: lk_models.ReconnectReason .RR_UNKNOWN ,
333+ );
331334 }
332335 }
333336
@@ -669,9 +672,10 @@ class Engine extends Disposable with EventsEmittable<EngineEvent> {
669672 ));
670673 logger.fine ('subscriber connectionState: $state ' );
671674 if (state.isDisconnected () || state.isFailed ()) {
672- await handleReconnect (state.isFailed ()
673- ? ClientDisconnectReason .peerConnectionFailed
674- : ClientDisconnectReason .peerConnectionClosed);
675+ await handleReconnect (
676+ state.isFailed () ? ClientDisconnectReason .peerConnectionFailed : ClientDisconnectReason .peerConnectionClosed,
677+ reconnectReason: lk_models.ReconnectReason .RR_SUBSCRIBER_FAILED ,
678+ );
675679 }
676680 };
677681
@@ -689,9 +693,10 @@ class Engine extends Disposable with EventsEmittable<EngineEvent> {
689693 ));
690694 logger.fine ('publisher connectionState: $state ' );
691695 if (state.isDisconnected () || state.isFailed ()) {
692- await handleReconnect (state.isFailed ()
693- ? ClientDisconnectReason .peerConnectionFailed
694- : ClientDisconnectReason .peerConnectionClosed);
696+ await handleReconnect (
697+ state.isFailed () ? ClientDisconnectReason .peerConnectionFailed : ClientDisconnectReason .peerConnectionClosed,
698+ reconnectReason: lk_models.ReconnectReason .RR_PUBLISHER_FAILED ,
699+ );
695700 }
696701 };
697702
@@ -980,7 +985,10 @@ class Engine extends Disposable with EventsEmittable<EngineEvent> {
980985 }
981986
982987 @internal
983- Future <void > handleReconnect (ClientDisconnectReason reason) async {
988+ Future <void > handleReconnect (
989+ ClientDisconnectReason reason, {
990+ lk_models.ReconnectReason ? reconnectReason,
991+ }) async {
984992 if (_isClosed) {
985993 logger.fine ('handleReconnect: engine is closed, skip' );
986994 return ;
@@ -1021,12 +1029,18 @@ class Engine extends Disposable with EventsEmittable<EngineEvent> {
10211029 }
10221030 logger.fine ('WebSocket reconnecting in $delay ms, retry times $reconnectAttempts ' );
10231031 reconnectTimeout = Timer (Duration (milliseconds: delay), () async {
1024- await attemptReconnect (reason);
1032+ await attemptReconnect (
1033+ reason,
1034+ reconnectReason: reconnectReason,
1035+ );
10251036 });
10261037 }
10271038
10281039 @internal
1029- Future <void > attemptReconnect (ClientDisconnectReason reason) async {
1040+ Future <void > attemptReconnect (
1041+ ClientDisconnectReason reason, {
1042+ lk_models.ReconnectReason ? reconnectReason,
1043+ }) async {
10301044 if (_isClosed) {
10311045 return ;
10321046 }
@@ -1062,7 +1076,10 @@ class Engine extends Disposable with EventsEmittable<EngineEvent> {
10621076 if (fullReconnectOnNext) {
10631077 await restartConnection ();
10641078 } else {
1065- await resumeConnection (reason);
1079+ await resumeConnection (
1080+ reason,
1081+ reconnectReason: reconnectReason,
1082+ );
10661083 }
10671084 clearPendingReconnect ();
10681085 attemptingReconnect = false ;
@@ -1093,7 +1110,10 @@ class Engine extends Disposable with EventsEmittable<EngineEvent> {
10931110 }
10941111 }
10951112
1096- Future <void > resumeConnection (ClientDisconnectReason reason) async {
1113+ Future <void > resumeConnection (
1114+ ClientDisconnectReason reason, {
1115+ lk_models.ReconnectReason ? reconnectReason,
1116+ }) async {
10971117 if (_isClosed) {
10981118 return ;
10991119 }
@@ -1107,6 +1127,7 @@ class Engine extends Disposable with EventsEmittable<EngineEvent> {
11071127 connectOptions: connectOptions,
11081128 roomOptions: roomOptions,
11091129 reconnect: true ,
1130+ reconnectReason: reconnectReason,
11101131 );
11111132
11121133 await events.waitFor <SignalReconnectedEvent >(
@@ -1322,7 +1343,8 @@ class Engine extends Disposable with EventsEmittable<EngineEvent> {
13221343 ..on < SignalDisconnectedEvent > ((event) async {
13231344 logger.fine ('Signal disconnected ${event .reason }' );
13241345 if (event.reason == DisconnectReason .disconnected && ! _isClosed) {
1325- await handleReconnect (ClientDisconnectReason .signal);
1346+ await handleReconnect (ClientDisconnectReason .signal,
1347+ reconnectReason: lk_models.ReconnectReason .RR_SIGNAL_DISCONNECTED );
13261348 } else if (event.reason == DisconnectReason .signalingConnectionFailure) {
13271349 events.emit (EngineDisconnectedEvent (
13281350 reason: event.reason,
0 commit comments