From 7ea433ca89e140f9879162e9558a1f61c6ee138a Mon Sep 17 00:00:00 2001 From: Julian Popescu Date: Fri, 11 Nov 2022 16:37:07 +0100 Subject: [PATCH] Simplify retry and retry immediately --- .gitignore | 1 + lib/eventsource.dart | 22 ++++++++++++---------- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/.gitignore b/.gitignore index 5506c67..754affa 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ build/ packages # Remove the following pattern if you wish to check in your lock file +pubspec.lock pubspec.lock.old # Files created by dart2js diff --git a/lib/eventsource.dart b/lib/eventsource.dart index 9825c60..aeae6dc 100644 --- a/lib/eventsource.dart +++ b/lib/eventsource.dart @@ -109,29 +109,31 @@ class EventSource extends Stream { } _readyState = EventSourceReadyState.OPEN; // start streaming the data - response.stream.transform(_decoder).listen((Event event) { - _streamController.add(event); - _lastEventId = event.id; - }, + response.stream.transform(_decoder).listen( + (Event event) { + _streamController.add(event); + _lastEventId = event.id; + }, cancelOnError: true, - onError: _retry, + onError: (err) { + _streamController.addError(err); + _retry(); + }, onDone: () => _readyState = EventSourceReadyState.CLOSED); } /// Retries until a new connection is established. Uses exponential backoff. - Future _retry(dynamic e) async { - _readyState = EventSourceReadyState.CONNECTING; - // try reopening with exponential backoff + Future _retry() async { Duration backoff = _retryDelay; while (true) { - await new Future.delayed(backoff); try { await _start(); break; } catch (error) { _streamController.addError(error); - backoff *= 2; } + await new Future.delayed(backoff); + backoff *= 2; } }