@@ -158,8 +158,13 @@ class RealtimeClient {
158
158
connState = SocketStates .connecting;
159
159
conn = transport (endPointURL, headers);
160
160
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
+ }
163
168
164
169
connState = SocketStates .open;
165
170
@@ -187,17 +192,20 @@ class RealtimeClient {
187
192
void disconnect ({int ? code, String ? reason}) {
188
193
final conn = this .conn;
189
194
if (conn != null ) {
195
+ final connectionWasOpen = connState == SocketStates .open;
190
196
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 ();
195
204
}
196
205
this .conn = null ;
197
206
198
207
// remove open handles
199
208
if (heartbeatTimer != null ) heartbeatTimer? .cancel ();
200
- reconnectTimer.reset ();
201
209
}
202
210
}
203
211
@@ -404,7 +412,7 @@ class RealtimeClient {
404
412
/// SocketStates.disconnected: by user with socket.disconnect()
405
413
/// SocketStates.closed: NOT by user, should try to reconnect
406
414
if (connState == SocketStates .closed) {
407
- _triggerChanError ();
415
+ _triggerChanError (event );
408
416
reconnectTimer.scheduleTimeout ();
409
417
}
410
418
if (heartbeatTimer != null ) heartbeatTimer! .cancel ();
@@ -415,15 +423,15 @@ class RealtimeClient {
415
423
416
424
void _onConnError (dynamic error) {
417
425
log ('transport' , error.toString ());
418
- _triggerChanError ();
426
+ _triggerChanError (error );
419
427
for (final callback in stateChangeCallbacks['error' ]! ) {
420
428
callback (error);
421
429
}
422
430
}
423
431
424
- void _triggerChanError () {
432
+ void _triggerChanError ([ dynamic error] ) {
425
433
for (final channel in channels) {
426
- channel.trigger (ChannelEvents .error.eventName ());
434
+ channel.trigger (ChannelEvents .error.eventName (), error );
427
435
}
428
436
}
429
437
0 commit comments