| OLD | NEW |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, 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 // Controller for creating and adding events to a stream. | 8 // Controller for creating and adding events to a stream. |
| 9 // ------------------------------------------------------------------- | 9 // ------------------------------------------------------------------- |
| 10 | 10 |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 73 * [onResume] call might not be executed. | 73 * [onResume] call might not be executed. |
| 74 */ | 74 */ |
| 75 factory StreamController({void onListen(), | 75 factory StreamController({void onListen(), |
| 76 void onPause(), | 76 void onPause(), |
| 77 void onResume(), | 77 void onResume(), |
| 78 onCancel(), | 78 onCancel(), |
| 79 bool sync: false}) { | 79 bool sync: false}) { |
| 80 if (onListen == null && onPause == null && | 80 if (onListen == null && onPause == null && |
| 81 onResume == null && onCancel == null) { | 81 onResume == null && onCancel == null) { |
| 82 return sync | 82 return sync |
| 83 ? new _NoCallbackSyncStreamController/*<T>*/() | 83 ? new _NoCallbackSyncStreamController<T>() |
| 84 : new _NoCallbackAsyncStreamController/*<T>*/(); | 84 : new _NoCallbackAsyncStreamController<T>(); |
| 85 } | 85 } |
| 86 return sync | 86 return sync |
| 87 ? new _SyncStreamController<T>(onListen, onPause, onResume, onCancel) | 87 ? new _SyncStreamController<T>(onListen, onPause, onResume, onCancel) |
| 88 : new _AsyncStreamController<T>(onListen, onPause, onResume, onCancel); | 88 : new _AsyncStreamController<T>(onListen, onPause, onResume, onCancel); |
| 89 } | 89 } |
| 90 | 90 |
| 91 /** | 91 /** |
| 92 * A controller where [stream] can be listened to more than once. | 92 * A controller where [stream] can be listened to more than once. |
| 93 * | 93 * |
| 94 * The [Stream] returned by [stream] is a broadcast stream. | 94 * The [Stream] returned by [stream] is a broadcast stream. |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 169 */ | 169 */ |
| 170 bool get isPaused; | 170 bool get isPaused; |
| 171 | 171 |
| 172 /** Whether there is a subscriber on the [Stream]. */ | 172 /** Whether there is a subscriber on the [Stream]. */ |
| 173 bool get hasListener; | 173 bool get hasListener; |
| 174 | 174 |
| 175 /** | 175 /** |
| 176 * Send or enqueue an error event. | 176 * Send or enqueue an error event. |
| 177 * | 177 * |
| 178 * If [error] is `null`, it is replaced by a [NullThrownError]. | 178 * If [error] is `null`, it is replaced by a [NullThrownError]. |
| 179 * | |
| 180 * Also allows an objection stack trace object, on top of what [EventSink] | |
| 181 * allows. | |
| 182 */ | 179 */ |
| 183 void addError(Object error, [StackTrace stackTrace]); | 180 void addError(Object error, [StackTrace stackTrace]); |
| 184 | 181 |
| 185 /** | 182 /** |
| 186 * Receives events from [source] and puts them into this controller's stream. | 183 * Receives events from [source] and puts them into this controller's stream. |
| 187 * | 184 * |
| 188 * Returns a future which completes when the source stream is done. | 185 * Returns a future which completes when the source stream is done. |
| 189 * | 186 * |
| 190 * Events must not be added directly to this controller using [add], | 187 * Events must not be added directly to this controller using [add], |
| 191 * [addError], [close] or [addStream], until the returned future | 188 * [addError], [close] or [addStream], until the returned future |
| (...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 387 _Future _doneFuture; | 384 _Future _doneFuture; |
| 388 | 385 |
| 389 _StreamController(); | 386 _StreamController(); |
| 390 | 387 |
| 391 _NotificationHandler get _onListen; | 388 _NotificationHandler get _onListen; |
| 392 _NotificationHandler get _onPause; | 389 _NotificationHandler get _onPause; |
| 393 _NotificationHandler get _onResume; | 390 _NotificationHandler get _onResume; |
| 394 _NotificationHandler get _onCancel; | 391 _NotificationHandler get _onCancel; |
| 395 | 392 |
| 396 // Return a new stream every time. The streams are equal, but not identical. | 393 // Return a new stream every time. The streams are equal, but not identical. |
| 397 Stream<T> get stream => new _ControllerStream(this); | 394 Stream<T> get stream => new _ControllerStream<T>(this); |
| 398 | 395 |
| 399 /** | 396 /** |
| 400 * Returns a view of this object that only exposes the [StreamSink] interface. | 397 * Returns a view of this object that only exposes the [StreamSink] interface. |
| 401 */ | 398 */ |
| 402 StreamSink<T> get sink => new _StreamSinkWrapper<T>(this); | 399 StreamSink<T> get sink => new _StreamSinkWrapper<T>(this); |
| 403 | 400 |
| 404 /** | 401 /** |
| 405 * Whether a listener has existed and been canceled. | 402 * Whether a listener has existed and been canceled. |
| 406 * | 403 * |
| 407 * After this, adding more events will be ignored. | 404 * After this, adding more events will be ignored. |
| (...skipping 343 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 751 this._onCancel()); | 748 this._onCancel()); |
| 752 } | 749 } |
| 753 | 750 |
| 754 abstract class _NoCallbacks { | 751 abstract class _NoCallbacks { |
| 755 _NotificationHandler get _onListen => null; | 752 _NotificationHandler get _onListen => null; |
| 756 _NotificationHandler get _onPause => null; | 753 _NotificationHandler get _onPause => null; |
| 757 _NotificationHandler get _onResume => null; | 754 _NotificationHandler get _onResume => null; |
| 758 _NotificationHandler get _onCancel => null; | 755 _NotificationHandler get _onCancel => null; |
| 759 } | 756 } |
| 760 | 757 |
| 761 class _NoCallbackAsyncStreamController/*<T>*/ = _StreamController/*<T>*/ | 758 class _NoCallbackAsyncStreamController<T> = _StreamController<T> |
| 762 with _AsyncStreamControllerDispatch/*<T>*/, _NoCallbacks; | 759 with _AsyncStreamControllerDispatch<T>, _NoCallbacks; |
| 763 | 760 |
| 764 class _NoCallbackSyncStreamController/*<T>*/ = _StreamController/*<T>*/ | 761 class _NoCallbackSyncStreamController<T> = _StreamController<T> |
| 765 with _SyncStreamControllerDispatch/*<T>*/, _NoCallbacks; | 762 with _SyncStreamControllerDispatch<T>, _NoCallbacks; |
| 766 | 763 |
| 767 typedef _NotificationHandler(); | 764 typedef _NotificationHandler(); |
| 768 | 765 |
| 769 Future _runGuarded(_NotificationHandler notificationHandler) { | 766 Future _runGuarded(_NotificationHandler notificationHandler) { |
| 770 if (notificationHandler == null) return null; | 767 if (notificationHandler == null) return null; |
| 771 try { | 768 try { |
| 772 var result = notificationHandler(); | 769 var result = notificationHandler(); |
| 773 if (result is Future) return result; | 770 if (result is Future) return result; |
| 774 return null; | 771 return null; |
| 775 } catch (e, s) { | 772 } catch (e, s) { |
| (...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 902 _StreamControllerAddStreamState(_StreamController controller, | 899 _StreamControllerAddStreamState(_StreamController controller, |
| 903 this.varData, | 900 this.varData, |
| 904 Stream source, | 901 Stream source, |
| 905 bool cancelOnError) | 902 bool cancelOnError) |
| 906 : super(controller, source, cancelOnError) { | 903 : super(controller, source, cancelOnError) { |
| 907 if (controller.isPaused) { | 904 if (controller.isPaused) { |
| 908 addSubscription.pause(); | 905 addSubscription.pause(); |
| 909 } | 906 } |
| 910 } | 907 } |
| 911 } | 908 } |
| OLD | NEW |