Skip to content

Commit f3efa6e

Browse files
authored
chore: Add ReconnectReason for reconnect. (#1020)
1 parent 9ce59de commit f3efa6e

File tree

4 files changed

+40
-13
lines changed

4 files changed

+40
-13
lines changed

.changes/add-reconnect-reason

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
patch type="added" "Send reconnect reason to server during WebSocket reconnection"

lib/src/core/engine.dart

Lines changed: 35 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -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,

lib/src/core/signal_client.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ class SignalClient extends Disposable with EventsEmittable<SignalEvent> {
101101
required ConnectOptions connectOptions,
102102
required RoomOptions roomOptions,
103103
bool reconnect = false,
104+
lk_models.ReconnectReason? reconnectReason,
104105
}) async {
105106
if (!kIsWeb && !lkPlatformIsTest()) {
106107
_connectivityResult = await Connectivity().checkConnectivity();
@@ -133,6 +134,7 @@ class SignalClient extends Disposable with EventsEmittable<SignalEvent> {
133134
roomOptions: roomOptions,
134135
reconnect: reconnect,
135136
sid: reconnect ? participantSid : null,
137+
reconnectReason: reconnectReason,
136138
);
137139

138140
logger.fine('SignalClient connecting with url: $rtcUri');

lib/src/utils.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,7 @@ class Utils {
166166
bool validate = false,
167167
bool forceSecure = false,
168168
String? sid,
169+
lk_models.ReconnectReason? reconnectReason,
169170
}) async {
170171
final Uri uri = Uri.parse(uriString);
171172

@@ -191,6 +192,7 @@ class Utils {
191192
'auto_subscribe': connectOptions.autoSubscribe ? '1' : '0',
192193
'adaptive_stream': roomOptions.adaptiveStream ? '1' : '0',
193194
if (reconnect) 'reconnect': '1',
195+
if (reconnect && reconnectReason != null) 'reconnect_reason': reconnectReason.value.toString(),
194196
if (reconnect && sid != null) 'sid': sid,
195197
'protocol': connectOptions.protocolVersion.toStringValue(),
196198
'sdk': 'flutter',

0 commit comments

Comments
 (0)