OLD | NEW |
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, 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 part of dart.async; | 5 part of dart.async; |
6 | 6 |
7 // ------------------------------------------------------------------- | 7 // ------------------------------------------------------------------- |
8 // Core Stream types | 8 // Core Stream types |
9 // ------------------------------------------------------------------- | 9 // ------------------------------------------------------------------- |
10 | 10 |
(...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
225 watch.start(); | 225 watch.start(); |
226 timer = new Timer(period - elapsed, () { | 226 timer = new Timer(period - elapsed, () { |
227 timer = null; | 227 timer = null; |
228 startPeriodicTimer(); | 228 startPeriodicTimer(); |
229 sendEvent(); | 229 sendEvent(); |
230 }); | 230 }); |
231 }, | 231 }, |
232 onCancel: () { | 232 onCancel: () { |
233 if (timer != null) timer.cancel(); | 233 if (timer != null) timer.cancel(); |
234 timer = null; | 234 timer = null; |
235 return Future._nullFuture; | |
236 }); | 235 }); |
237 return controller.stream; | 236 return controller.stream; |
238 } | 237 } |
239 | 238 |
240 /** | 239 /** |
241 * Creates a stream where all events of an existing stream are piped through | 240 * Creates a stream where all events of an existing stream are piped through |
242 * a sink-transformation. | 241 * a sink-transformation. |
243 * | 242 * |
244 * The given [mapSink] closure is invoked when the returned stream is | 243 * The given [mapSink] closure is invoked when the returned stream is |
245 * listened to. All events from the [source] are added into the event sink | 244 * listened to. All events from the [source] are added into the event sink |
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
435 controller = new StreamController/*<E>*/.broadcast( | 434 controller = new StreamController/*<E>*/.broadcast( |
436 onListen: onListen, | 435 onListen: onListen, |
437 onCancel: () { subscription.cancel(); }, | 436 onCancel: () { subscription.cancel(); }, |
438 sync: true | 437 sync: true |
439 ); | 438 ); |
440 } else { | 439 } else { |
441 controller = new StreamController/*<E>*/( | 440 controller = new StreamController/*<E>*/( |
442 onListen: onListen, | 441 onListen: onListen, |
443 onPause: () { subscription.pause(); }, | 442 onPause: () { subscription.pause(); }, |
444 onResume: () { subscription.resume(); }, | 443 onResume: () { subscription.resume(); }, |
445 onCancel: () => subscription.cancel(), | 444 onCancel: () { subscription.cancel(); }, |
446 sync: true | 445 sync: true |
447 ); | 446 ); |
448 } | 447 } |
449 return controller.stream; | 448 return controller.stream; |
450 } | 449 } |
451 | 450 |
452 /** | 451 /** |
453 * Creates a new stream with the events of a stream per original event. | 452 * Creates a new stream with the events of a stream per original event. |
454 * | 453 * |
455 * This acts like [expand], except that [convert] returns a [Stream] | 454 * This acts like [expand], except that [convert] returns a [Stream] |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
493 controller = new StreamController/*<E>*/.broadcast( | 492 controller = new StreamController/*<E>*/.broadcast( |
494 onListen: onListen, | 493 onListen: onListen, |
495 onCancel: () { subscription.cancel(); }, | 494 onCancel: () { subscription.cancel(); }, |
496 sync: true | 495 sync: true |
497 ); | 496 ); |
498 } else { | 497 } else { |
499 controller = new StreamController/*<E>*/( | 498 controller = new StreamController/*<E>*/( |
500 onListen: onListen, | 499 onListen: onListen, |
501 onPause: () { subscription.pause(); }, | 500 onPause: () { subscription.pause(); }, |
502 onResume: () { subscription.resume(); }, | 501 onResume: () { subscription.resume(); }, |
503 onCancel: () => subscription.cancel(), | 502 onCancel: () { subscription.cancel(); }, |
504 sync: true | 503 sync: true |
505 ); | 504 ); |
506 } | 505 } |
507 return controller.stream; | 506 return controller.stream; |
508 } | 507 } |
509 | 508 |
510 /** | 509 /** |
511 * Creates a wrapper Stream that intercepts some errors from this stream. | 510 * Creates a wrapper Stream that intercepts some errors from this stream. |
512 * | 511 * |
513 * If this stream sends an error that matches [test], then it is intercepted | 512 * If this stream sends an error that matches [test], then it is intercepted |
(...skipping 887 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1401 abstract class StreamSubscription<T> { | 1400 abstract class StreamSubscription<T> { |
1402 /** | 1401 /** |
1403 * Cancels this subscription. | 1402 * Cancels this subscription. |
1404 * | 1403 * |
1405 * After this call, the subscription no longer receives events. | 1404 * After this call, the subscription no longer receives events. |
1406 * | 1405 * |
1407 * The stream may need to shut down the source of events and clean up after | 1406 * The stream may need to shut down the source of events and clean up after |
1408 * the subscription is canceled. | 1407 * the subscription is canceled. |
1409 * | 1408 * |
1410 * Returns a future that is completed once the stream has finished | 1409 * Returns a future that is completed once the stream has finished |
1411 * its cleanup. | 1410 * its cleanup. May also return `null` if no cleanup was necessary. |
1412 * | |
1413 * For historical reasons, may also return `null` if no cleanup was necessary. | |
1414 * Returning `null` is deprecated and should be avoided. | |
1415 * | 1411 * |
1416 * Typically, futures are returned when the stream needs to release resources. | 1412 * Typically, futures are returned when the stream needs to release resources. |
1417 * For example, a stream might need to close an open file (as an asynchronous | 1413 * For example, a stream might need to close an open file (as an asynchronous |
1418 * operation). If the listener wants to delete the file after having | 1414 * operation). If the listener wants to delete the file after having |
1419 * canceled the subscription, it must wait for the cleanup future to complete. | 1415 * canceled the subscription, it must wait for the cleanup future to complete. |
1420 * | 1416 * |
1421 * A returned future completes with a `null` value. | 1417 * A returned future completes with a `null` value. |
1422 * If the cleanup throws, which it really shouldn't, the returned future | 1418 * If the cleanup throws, which it really shouldn't, the returned future |
1423 * completes with that error. | 1419 * completes with that error. |
1424 */ | 1420 */ |
(...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1708 * // Duplicate the data. | 1704 * // Duplicate the data. |
1709 * controller.add(data); | 1705 * controller.add(data); |
1710 * controller.add(data); | 1706 * controller.add(data); |
1711 * }, | 1707 * }, |
1712 * onError: controller.addError, | 1708 * onError: controller.addError, |
1713 * onDone: controller.close, | 1709 * onDone: controller.close, |
1714 * cancelOnError: cancelOnError); | 1710 * cancelOnError: cancelOnError); |
1715 * }, | 1711 * }, |
1716 * onPause: () { subscription.pause(); }, | 1712 * onPause: () { subscription.pause(); }, |
1717 * onResume: () { subscription.resume(); }, | 1713 * onResume: () { subscription.resume(); }, |
1718 * onCancel: () => subscription.cancel(), | 1714 * onCancel: () { subscription.cancel(); }, |
1719 * sync: true); | 1715 * sync: true); |
1720 * return controller.stream.listen(null); | 1716 * return controller.stream.listen(null); |
1721 * }); | 1717 * }); |
1722 */ | 1718 */ |
1723 const factory StreamTransformer( | 1719 const factory StreamTransformer( |
1724 StreamSubscription<T> transformer(Stream<S> stream, bool cancelOnError)) | 1720 StreamSubscription<T> transformer(Stream<S> stream, bool cancelOnError)) |
1725 = _StreamSubscriptionTransformer<S, T>; | 1721 = _StreamSubscriptionTransformer<S, T>; |
1726 | 1722 |
1727 /** | 1723 /** |
1728 * Creates a [StreamTransformer] that delegates events to the given functions. | 1724 * Creates a [StreamTransformer] that delegates events to the given functions. |
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1826 class _ControllerEventSinkWrapper<T> implements EventSink<T> { | 1822 class _ControllerEventSinkWrapper<T> implements EventSink<T> { |
1827 EventSink _sink; | 1823 EventSink _sink; |
1828 _ControllerEventSinkWrapper(this._sink); | 1824 _ControllerEventSinkWrapper(this._sink); |
1829 | 1825 |
1830 void add(T data) { _sink.add(data); } | 1826 void add(T data) { _sink.add(data); } |
1831 void addError(error, [StackTrace stackTrace]) { | 1827 void addError(error, [StackTrace stackTrace]) { |
1832 _sink.addError(error, stackTrace); | 1828 _sink.addError(error, stackTrace); |
1833 } | 1829 } |
1834 void close() { _sink.close(); } | 1830 void close() { _sink.close(); } |
1835 } | 1831 } |
OLD | NEW |