Skip to content

Commit 8e090c9

Browse files
committed
fix: wait for conn being ready and re-add error to _triggerChanError
1 parent 8e6d243 commit 8e090c9

File tree

1 file changed

+19
-11
lines changed

1 file changed

+19
-11
lines changed

packages/realtime_client/lib/src/realtime_client.dart

+19-11
Original file line numberDiff line numberDiff line change
@@ -158,8 +158,13 @@ class RealtimeClient {
158158
connState = SocketStates.connecting;
159159
conn = transport(endPointURL, headers);
160160

161-
// handle connection errors
162-
conn!.ready.catchError(_onConnError);
161+
try {
162+
await conn!.ready;
163+
} catch (error) {
164+
_onConnError(error);
165+
reconnectTimer.scheduleTimeout();
166+
return;
167+
}
163168

164169
connState = SocketStates.open;
165170

@@ -187,17 +192,20 @@ class RealtimeClient {
187192
void disconnect({int? code, String? reason}) {
188193
final conn = this.conn;
189194
if (conn != null) {
195+
final connectionWasOpen = connState == SocketStates.open;
190196
connState = SocketStates.disconnected;
191-
if (code != null) {
192-
conn.sink.close(code, reason ?? '');
193-
} else {
194-
conn.sink.close();
197+
if (connectionWasOpen) {
198+
if (code != null) {
199+
conn.sink.close(code, reason ?? '');
200+
} else {
201+
conn.sink.close();
202+
}
203+
reconnectTimer.reset();
195204
}
196205
this.conn = null;
197206

198207
// remove open handles
199208
if (heartbeatTimer != null) heartbeatTimer?.cancel();
200-
reconnectTimer.reset();
201209
}
202210
}
203211

@@ -404,7 +412,7 @@ class RealtimeClient {
404412
/// SocketStates.disconnected: by user with socket.disconnect()
405413
/// SocketStates.closed: NOT by user, should try to reconnect
406414
if (connState == SocketStates.closed) {
407-
_triggerChanError();
415+
_triggerChanError(event);
408416
reconnectTimer.scheduleTimeout();
409417
}
410418
if (heartbeatTimer != null) heartbeatTimer!.cancel();
@@ -415,15 +423,15 @@ class RealtimeClient {
415423

416424
void _onConnError(dynamic error) {
417425
log('transport', error.toString());
418-
_triggerChanError();
426+
_triggerChanError(error);
419427
for (final callback in stateChangeCallbacks['error']!) {
420428
callback(error);
421429
}
422430
}
423431

424-
void _triggerChanError() {
432+
void _triggerChanError([dynamic error]) {
425433
for (final channel in channels) {
426-
channel.trigger(ChannelEvents.error.eventName());
434+
channel.trigger(ChannelEvents.error.eventName(), error);
427435
}
428436
}
429437

0 commit comments

Comments
 (0)