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

Side by Side Diff: mojo/public/dart/src/event_stream.dart

Issue 968243003: Dart: Adds optional named arguments for creating bindings. (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Binding -> Stub, delegate -> impl Created 5 years, 9 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 part of core; 5 part of core;
6 6
7 class MojoEventStream extends Stream<List<int>> { 7 class MojoEventStream extends Stream<List<int>> {
8 // The underlying Mojo handle. 8 // The underlying Mojo handle.
9 MojoHandle _handle; 9 MojoHandle _handle;
10 10
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
125 125
126 abstract class Listener { 126 abstract class Listener {
127 StreamSubscription<List<int>> listen({Function onClosed}); 127 StreamSubscription<List<int>> listen({Function onClosed});
128 } 128 }
129 129
130 class MojoEventStreamListener { 130 class MojoEventStreamListener {
131 MojoMessagePipeEndpoint _endpoint; 131 MojoMessagePipeEndpoint _endpoint;
132 MojoEventStream _eventStream; 132 MojoEventStream _eventStream;
133 bool _isOpen = false; 133 bool _isOpen = false;
134 bool _isInHandler = false; 134 bool _isInHandler = false;
135 StreamSubscription subscription;
135 136
136 MojoEventStreamListener(MojoMessagePipeEndpoint endpoint) 137 MojoEventStreamListener.fromEndpoint(MojoMessagePipeEndpoint endpoint,
138 {bool doListen: true, Function onClosed})
137 : _endpoint = endpoint, 139 : _endpoint = endpoint,
138 _eventStream = new MojoEventStream(endpoint.handle), 140 _eventStream = new MojoEventStream(endpoint.handle),
139 _isOpen = false; 141 _isOpen = false {
142 if (doListen) {
143 listen(onClosed: onClosed);
144 }
145 }
140 146
141 MojoEventStreamListener.fromHandle(MojoHandle handle) { 147 MojoEventStreamListener.fromHandle(MojoHandle handle,
148 {bool doListen: true, Function onClosed}) {
142 _endpoint = new MojoMessagePipeEndpoint(handle); 149 _endpoint = new MojoMessagePipeEndpoint(handle);
143 _eventStream = new MojoEventStream(handle); 150 _eventStream = new MojoEventStream(handle);
144 _isOpen = false; 151 _isOpen = false;
152 if (doListen) {
153 listen(onClosed: onClosed);
154 }
145 } 155 }
146 156
147 MojoEventStreamListener.unbound() 157 MojoEventStreamListener.unbound()
148 : _endpoint = null, 158 : _endpoint = null,
149 _eventStream = null, 159 _eventStream = null,
150 _isOpen = false; 160 _isOpen = false;
151 161
152 void bind(MojoMessagePipeEndpoint endpoint) { 162 void bind(MojoMessagePipeEndpoint endpoint) {
153 assert(!isBound); 163 assert(!isBound);
154 _endpoint = endpoint; 164 _endpoint = endpoint;
155 _eventStream = new MojoEventStream(endpoint.handle); 165 _eventStream = new MojoEventStream(endpoint.handle);
156 _isOpen = false; 166 _isOpen = false;
157 } 167 }
158 168
159 void bindFromHandle(MojoHandle handle) { 169 void bindFromHandle(MojoHandle handle) {
160 assert(!isBound); 170 assert(!isBound);
161 _endpoint = new MojoMessagePipeEndpoint(handle); 171 _endpoint = new MojoMessagePipeEndpoint(handle);
162 _eventStream = new MojoEventStream(handle); 172 _eventStream = new MojoEventStream(handle);
163 _isOpen = false; 173 _isOpen = false;
164 } 174 }
165 175
166 StreamSubscription<List<int>> listen({Function onClosed}) { 176 StreamSubscription<List<int>> listen({Function onClosed}) {
177 assert(isBound && (subscription == null));
167 _isOpen = true; 178 _isOpen = true;
168 return _eventStream.listen((List<int> event) { 179 subscription = _eventStream.listen((List<int> event) {
169 var signalsWatched = new MojoHandleSignals(event[0]); 180 var signalsWatched = new MojoHandleSignals(event[0]);
170 var signalsReceived = new MojoHandleSignals(event[1]); 181 var signalsReceived = new MojoHandleSignals(event[1]);
171 if (signalsReceived.isPeerClosed) { 182 if (signalsReceived.isPeerClosed) {
172 if (onClosed != null) onClosed(); 183 if (onClosed != null) onClosed();
173 close(); 184 close();
174 // The peer being closed obviates any other signal we might 185 // The peer being closed obviates any other signal we might
175 // have received since we won't be able to read or write the handle. 186 // have received since we won't be able to read or write the handle.
176 // Thus, we just return before invoking other handlers. 187 // Thus, we just return before invoking other handlers.
177 return; 188 return;
178 } 189 }
179 _isInHandler = true; 190 _isInHandler = true;
180 if (signalsReceived.isReadable) { 191 if (signalsReceived.isReadable) {
181 assert(_eventStream.readyRead); 192 assert(_eventStream.readyRead);
182 handleRead(); 193 handleRead();
183 } 194 }
184 if (signalsReceived.isWritable) { 195 if (signalsReceived.isWritable) {
185 assert(_eventStream.readyWrite); 196 assert(_eventStream.readyWrite);
186 handleWrite(); 197 handleWrite();
187 } 198 }
188 if (_isOpen) { 199 if (_isOpen) {
189 _eventStream.enableSignals(signalsWatched); 200 _eventStream.enableSignals(signalsWatched);
190 } 201 }
191 _isInHandler = false; 202 _isInHandler = false;
192 }, onDone: close); 203 }, onDone: close);
204 return subscription;
193 } 205 }
194 206
195 void close() { 207 void close() {
196 _isOpen = false; 208 _isOpen = false;
197 _endpoint = null; 209 _endpoint = null;
210 subscription = null;
198 if (_eventStream != null) { 211 if (_eventStream != null) {
199 _eventStream.close(); 212 _eventStream.close();
200 _eventStream = null; 213 _eventStream = null;
201 } 214 }
202 } 215 }
203 216
204 void handleRead() {} 217 void handleRead() {}
205 void handleWrite() {} 218 void handleWrite() {}
206 219
207 MojoMessagePipeEndpoint get endpoint => _endpoint; 220 MojoMessagePipeEndpoint get endpoint => _endpoint;
208 bool get isOpen => _isOpen; 221 bool get isOpen => _isOpen;
209 bool get isInHandler => _isInHandler; 222 bool get isInHandler => _isInHandler;
210 bool get isBound => _endpoint != null; 223 bool get isBound => _endpoint != null;
211 } 224 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698