Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(53)

Side by Side Diff: sdk/lib/async/broadcast_stream_controller.dart

Issue 1242023007: Add setters for callbacks on StreamController. (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Address comments. Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 class _BroadcastStream<T> extends _ControllerStream<T> { 7 class _BroadcastStream<T> extends _ControllerStream<T> {
8 _BroadcastStream(_StreamControllerLifecycle controller) : super(controller); 8 _BroadcastStream(_StreamControllerLifecycle controller) : super(controller);
9 9
10 bool get isBroadcast => true; 10 bool get isBroadcast => true;
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
60 // so we don't bother calling it. 60 // so we don't bother calling it.
61 void _onPause() { } 61 void _onPause() { }
62 62
63 // The controller._recordResume doesn't do anything for a broadcast 63 // The controller._recordResume doesn't do anything for a broadcast
64 // controller, so we don't bother calling it. 64 // controller, so we don't bother calling it.
65 void _onResume() { } 65 void _onResume() { }
66 66
67 // _onCancel is inherited. 67 // _onCancel is inherited.
68 } 68 }
69 69
70
71 abstract class _BroadcastStreamController<T> 70 abstract class _BroadcastStreamController<T>
72 implements StreamController<T>, 71 implements StreamController<T>,
73 _StreamControllerLifecycle<T>, 72 _StreamControllerLifecycle<T>,
74 _BroadcastSubscriptionLink, 73 _BroadcastSubscriptionLink,
75 _EventSink<T>, 74 _EventSink<T>,
76 _EventDispatch<T> { 75 _EventDispatch<T> {
77 static const int _STATE_INITIAL = 0; 76 static const int _STATE_INITIAL = 0;
78 static const int _STATE_EVENT_ID = 1; 77 static const int _STATE_EVENT_ID = 1;
79 static const int _STATE_FIRING = 2; 78 static const int _STATE_FIRING = 2;
80 static const int _STATE_CLOSED = 4; 79 static const int _STATE_CLOSED = 4;
81 static const int _STATE_ADDSTREAM = 8; 80 static const int _STATE_ADDSTREAM = 8;
82 81
83 final _NotificationHandler _onListen; 82 _NotificationHandler _onListen;
84 final _NotificationHandler _onCancel; 83 _NotificationHandler _onCancel;
85 84
86 // State of the controller. 85 // State of the controller.
87 int _state; 86 int _state;
88 87
89 // Double-linked list of active listeners. 88 // Double-linked list of active listeners.
90 _BroadcastSubscriptionLink _next; 89 _BroadcastSubscriptionLink _next;
91 _BroadcastSubscriptionLink _previous; 90 _BroadcastSubscriptionLink _previous;
92 91
93 // Extra state used during an [addStream] call. 92 // Extra state used during an [addStream] call.
94 _AddStreamState<T> _addStreamState; 93 _AddStreamState<T> _addStreamState;
(...skipping 11 matching lines...) Expand all
106 * Any attempt to listen after calling [close] will throw, so there won't 105 * Any attempt to listen after calling [close] will throw, so there won't
107 * be any further listeners. 106 * be any further listeners.
108 */ 107 */
109 _Future _doneFuture; 108 _Future _doneFuture;
110 109
111 _BroadcastStreamController(this._onListen, this._onCancel) 110 _BroadcastStreamController(this._onListen, this._onCancel)
112 : _state = _STATE_INITIAL { 111 : _state = _STATE_INITIAL {
113 _next = _previous = this; 112 _next = _previous = this;
114 } 113 }
115 114
115 void set onListen(void onListenHandler()) { _onListen = onListenHandler; }
116
117 void set onPause(void onPauseHandler()) {
118 throw new UnsupportedError(
119 "Broadcast stream controllers do not support pause callbacks");
120 }
121
122 void set onResume(void onResumeHandler()) {
123 throw new UnsupportedError(
124 "Broadcast stream controllers do not support pause callbacks");
125 }
126
127 void set onCancel(onCancelHandler()) { _onCancel = onCancelHandler; }
128
116 // StreamController interface. 129 // StreamController interface.
117 130
118 Stream<T> get stream => new _BroadcastStream<T>(this); 131 Stream<T> get stream => new _BroadcastStream<T>(this);
119 132
120 StreamSink<T> get sink => new _StreamSinkWrapper<T>(this); 133 StreamSink<T> get sink => new _StreamSinkWrapper<T>(this);
121 134
122 bool get isClosed => (_state & _STATE_CLOSED) != 0; 135 bool get isClosed => (_state & _STATE_CLOSED) != 0;
123 136
124 /** 137 /**
125 * A broadcast controller is never paused. 138 * A broadcast controller is never paused.
(...skipping 388 matching lines...) Expand 10 before | Expand all | Expand 10 after
514 _pauseCount++; 527 _pauseCount++;
515 } 528 }
516 void resume() { _resume(null); } 529 void resume() { _resume(null); }
517 void _resume(_) { 530 void _resume(_) {
518 if (_pauseCount > 0) _pauseCount--; 531 if (_pauseCount > 0) _pauseCount--;
519 } 532 }
520 Future cancel() { return new _Future.immediate(null); } 533 Future cancel() { return new _Future.immediate(null); }
521 bool get isPaused => _pauseCount > 0; 534 bool get isPaused => _pauseCount > 0;
522 Future asFuture([Object value]) => new _Future(); 535 Future asFuture([Object value]) => new _Future();
523 } 536 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698