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

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

Issue 982673002: Dart: Removes need to call listen(). (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Merge and Format 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
« no previous file with comments | « mojo/public/dart/src/codec.dart ('k') | mojo/public/dart/src/proxy.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
113 } 113 }
114 } 114 }
115 } 115 }
116 116
117 bool get readyRead => _handle.readyRead; 117 bool get readyRead => _handle.readyRead;
118 bool get readyWrite => _handle.readyWrite; 118 bool get readyWrite => _handle.readyWrite;
119 119
120 String toString() => "$_handle"; 120 String toString() => "$_handle";
121 } 121 }
122 122
123 abstract class Listener { 123 typedef void ErrorHandler();
124 StreamSubscription<List<int>> listen({Function onClosed});
125 }
126 124
127 class MojoEventStreamListener { 125 class MojoEventStreamListener {
128 MojoMessagePipeEndpoint _endpoint; 126 MojoMessagePipeEndpoint _endpoint;
129 MojoEventStream _eventStream; 127 MojoEventStream _eventStream;
130 bool _isOpen = false; 128 bool _isOpen = false;
131 bool _isInHandler = false; 129 bool _isInHandler = false;
132 StreamSubscription subscription; 130 StreamSubscription subscription;
131 ErrorHandler onError;
133 132
134 MojoEventStreamListener.fromEndpoint(MojoMessagePipeEndpoint endpoint, 133 MojoEventStreamListener.fromEndpoint(MojoMessagePipeEndpoint endpoint)
135 {bool doListen: true, Function onClosed})
136 : _endpoint = endpoint, 134 : _endpoint = endpoint,
137 _eventStream = new MojoEventStream(endpoint.handle), 135 _eventStream = new MojoEventStream(endpoint.handle),
138 _isOpen = false { 136 _isOpen = false {
139 if (doListen) { 137 listen();
140 listen(onClosed: onClosed);
141 }
142 } 138 }
143 139
144 MojoEventStreamListener.fromHandle(MojoHandle handle, 140 MojoEventStreamListener.fromHandle(MojoHandle handle) {
145 {bool doListen: true, Function onClosed}) {
146 _endpoint = new MojoMessagePipeEndpoint(handle); 141 _endpoint = new MojoMessagePipeEndpoint(handle);
147 _eventStream = new MojoEventStream(handle); 142 _eventStream = new MojoEventStream(handle);
148 _isOpen = false; 143 _isOpen = false;
149 if (doListen) { 144 listen();
150 listen(onClosed: onClosed);
151 }
152 } 145 }
153 146
154 MojoEventStreamListener.unbound() 147 MojoEventStreamListener.unbound()
155 : _endpoint = null, 148 : _endpoint = null,
156 _eventStream = null, 149 _eventStream = null,
157 _isOpen = false; 150 _isOpen = false;
158 151
159 void bind(MojoMessagePipeEndpoint endpoint) { 152 void bind(MojoMessagePipeEndpoint endpoint) {
160 assert(!isBound); 153 assert(!isBound);
161 _endpoint = endpoint; 154 _endpoint = endpoint;
162 _eventStream = new MojoEventStream(endpoint.handle); 155 _eventStream = new MojoEventStream(endpoint.handle);
163 _isOpen = false; 156 _isOpen = false;
164 } 157 }
165 158
166 void bindFromHandle(MojoHandle handle) { 159 void bindFromHandle(MojoHandle handle) {
167 assert(!isBound); 160 assert(!isBound);
168 _endpoint = new MojoMessagePipeEndpoint(handle); 161 _endpoint = new MojoMessagePipeEndpoint(handle);
169 _eventStream = new MojoEventStream(handle); 162 _eventStream = new MojoEventStream(handle);
170 _isOpen = false; 163 _isOpen = false;
171 } 164 }
172 165
173 StreamSubscription<List<int>> listen({Function onClosed}) { 166 StreamSubscription<List<int>> listen() {
174 assert(isBound && (subscription == null)); 167 assert(isBound && (subscription == null));
175 _isOpen = true; 168 _isOpen = true;
176 subscription = _eventStream.listen((List<int> event) { 169 subscription = _eventStream.listen((List<int> event) {
177 var signalsWatched = new MojoHandleSignals(event[0]); 170 var signalsWatched = new MojoHandleSignals(event[0]);
178 var signalsReceived = new MojoHandleSignals(event[1]); 171 var signalsReceived = new MojoHandleSignals(event[1]);
179 _isInHandler = true; 172 _isInHandler = true;
180 if (signalsReceived.isReadable) { 173 if (signalsReceived.isReadable) {
181 assert(_eventStream.readyRead); 174 assert(_eventStream.readyRead);
182 handleRead(); 175 handleRead();
183 } 176 }
184 if (signalsReceived.isWritable) { 177 if (signalsReceived.isWritable) {
185 assert(_eventStream.readyWrite); 178 assert(_eventStream.readyWrite);
186 handleWrite(); 179 handleWrite();
187 } 180 }
188 if (_isOpen) { 181 if (_isOpen) {
189 _eventStream.enableSignals(signalsWatched); 182 _eventStream.enableSignals(signalsWatched);
190 } 183 }
191 _isInHandler = false; 184 _isInHandler = false;
192 if (signalsReceived.isPeerClosed) { 185 if (signalsReceived.isPeerClosed) {
193 if (onClosed != null) onClosed(); 186 if (onError != null) onError();
194 close(); 187 close();
195 // The peer being closed obviates any other signal we might 188 // The peer being closed obviates any other signal we might
196 // have received since we won't be able to read or write the handle. 189 // have received since we won't be able to read or write the handle.
197 // Thus, we just return before invoking other handlers. 190 // Thus, we just return before invoking other handlers.
198 return; 191 return;
199 } 192 }
200 }, onDone: close); 193 }, onDone: close);
201 return subscription; 194 return subscription;
202 } 195 }
203 196
(...skipping 11 matching lines...) Expand all
215 void handleWrite() {} 208 void handleWrite() {}
216 209
217 MojoMessagePipeEndpoint get endpoint => _endpoint; 210 MojoMessagePipeEndpoint get endpoint => _endpoint;
218 bool get isOpen => _isOpen; 211 bool get isOpen => _isOpen;
219 bool get isInHandler => _isInHandler; 212 bool get isInHandler => _isInHandler;
220 bool get isBound => _endpoint != null; 213 bool get isBound => _endpoint != null;
221 214
222 String toString() => "MojoEventStreamListener(" 215 String toString() => "MojoEventStreamListener("
223 "isOpen: $isOpen, isBound: $isBound, endpoint: $_endpoint)"; 216 "isOpen: $isOpen, isBound: $isBound, endpoint: $_endpoint)";
224 } 217 }
OLDNEW
« no previous file with comments | « mojo/public/dart/src/codec.dart ('k') | mojo/public/dart/src/proxy.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698