@@ -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