Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 library async.stream_events; | 5 library async.stream_events; |
| 6 | 6 |
| 7 import 'dart:async'; | 7 import 'dart:async'; |
| 8 import 'dart:collection'; | 8 import 'dart:collection'; |
| 9 | 9 |
| 10 import "subscription_stream.dart"; | 10 import "subscription_stream.dart"; |
| (...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 229 /// The returned future completes with the result of calling | 229 /// The returned future completes with the result of calling |
| 230 /// `cancel`. | 230 /// `cancel`. |
| 231 /// | 231 /// |
| 232 /// After calling `cancel`, no further events can be requested. | 232 /// After calling `cancel`, no further events can be requested. |
| 233 /// None of [next], [rest], [skip], [take] or [cancel] may be | 233 /// None of [next], [rest], [skip], [take] or [cancel] may be |
| 234 /// called again. | 234 /// called again. |
| 235 Future cancel({bool immediate: false}) { | 235 Future cancel({bool immediate: false}) { |
| 236 if (_isClosed) throw _failClosed(); | 236 if (_isClosed) throw _failClosed(); |
| 237 _isClosed = true; | 237 _isClosed = true; |
| 238 | 238 |
| 239 if (_isDone) return new Future.value(); | |
| 240 if (_subscription == null) _subscription = _sourceStream.listen(null); | |
| 241 | |
| 239 if (!immediate) { | 242 if (!immediate) { |
| 240 var request = new _CancelRequest(this); | 243 var request = new _CancelRequest(this); |
| 241 _addRequest(request); | 244 _addRequest(request); |
| 242 return request.future; | 245 return request.future; |
|
Lasse Reichstein Nielsen
2015/07/14 07:28:10
That doesn't look right either - you subscribe to
| |
| 243 } | 246 } |
| 244 | 247 |
| 245 if (_isDone) return new Future.value(); | |
| 246 if (_subscription == null) _subscription = _sourceStream.listen(null); | |
| 247 var future = _subscription.cancel(); | 248 var future = _subscription.cancel(); |
| 248 _onDone(); | 249 _onDone(); |
| 249 return future; | 250 return future; |
| 250 } | 251 } |
| 251 | 252 |
| 252 /// Returns an error for when a request is made after cancel. | 253 /// Returns an error for when a request is made after cancel. |
| 253 /// | 254 /// |
| 254 /// Returns a [StateError] with a message saying that either | 255 /// Returns a [StateError] with a message saying that either |
| 255 /// [cancel] or [rest] have already been called. | 256 /// [cancel] or [rest] have already been called. |
| 256 Error _failClosed() { | 257 Error _failClosed() { |
| (...skipping 267 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 524 _shutdown(); | 525 _shutdown(); |
| 525 return true; | 526 return true; |
| 526 } | 527 } |
| 527 | 528 |
| 528 void close(_) { | 529 void close(_) { |
| 529 _shutdown(); | 530 _shutdown(); |
| 530 } | 531 } |
| 531 | 532 |
| 532 void _shutdown() { | 533 void _shutdown() { |
| 533 if (_streamQueue._subscription == null) { | 534 if (_streamQueue._subscription == null) { |
| 534 _completer.complete(); | 535 _completer.complete(); |
|
Lasse Reichstein Nielsen
2015/07/14 07:28:10
This skips creating the subscription if it's null.
nweiz
2015/07/14 20:14:08
Done.
| |
| 535 } else { | 536 } else { |
| 536 _completer.complete(_streamQueue._dispose().cancel()); | 537 _completer.complete(_streamQueue._dispose().cancel()); |
| 537 } | 538 } |
| 538 } | 539 } |
| 539 } | 540 } |
| 540 | 541 |
| 541 /// Request for a [StreamQueue.rest] call. | 542 /// Request for a [StreamQueue.rest] call. |
| 542 /// | 543 /// |
| 543 /// The request is always complete, it just waits in the request queue | 544 /// The request is always complete, it just waits in the request queue |
| 544 /// until all previous events are fulfilled, then it takes over the | 545 /// until all previous events are fulfilled, then it takes over the |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 620 _completer.complete(true); | 621 _completer.complete(true); |
| 621 return true; | 622 return true; |
| 622 } | 623 } |
| 623 return false; | 624 return false; |
| 624 } | 625 } |
| 625 | 626 |
| 626 void close(_) { | 627 void close(_) { |
| 627 _completer.complete(false); | 628 _completer.complete(false); |
| 628 } | 629 } |
| 629 } | 630 } |
| OLD | NEW |