Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
22 changes: 12 additions & 10 deletions lib/eventsource.dart
Original file line number Diff line number Diff line change
Expand Up @@ -109,29 +109,31 @@ class EventSource extends Stream<Event> {
}
_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;
}
}

Expand Down