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

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

Issue 851173002: Dart: Encode/Decode handle and interface types. (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Fix Interface encode parameters Created 5 years, 11 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/data_pipe.dart ('k') | mojo/public/dart/src/interface.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<int> { 7 class MojoEventStream extends Stream<int> {
8 // The underlying Mojo handle. 8 // The underlying Mojo handle.
9 MojoHandle _handle; 9 MojoHandle _handle;
10 10
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
115 bool get readyRead => _handle.readyRead; 115 bool get readyRead => _handle.readyRead;
116 bool get readyWrite => _handle.readyWrite; 116 bool get readyWrite => _handle.readyWrite;
117 117
118 String toString() => "$_handle"; 118 String toString() => "$_handle";
119 } 119 }
120 120
121 121
122 class MojoEventStreamListener { 122 class MojoEventStreamListener {
123 MojoMessagePipeEndpoint _endpoint; 123 MojoMessagePipeEndpoint _endpoint;
124 MojoEventStream _eventStream; 124 MojoEventStream _eventStream;
125 bool _isOpen; 125 bool _isOpen = false;
126 bool _isInHandler; 126 bool _isInHandler = false;
127 127
128 MojoEventStreamListener(MojoMessagePipeEndpoint endpoint) : 128 MojoEventStreamListener(MojoMessagePipeEndpoint endpoint) :
129 _endpoint = endpoint, 129 _endpoint = endpoint,
130 _eventStream = new MojoEventStream(endpoint.handle), 130 _eventStream = new MojoEventStream(endpoint.handle),
131 _isOpen = false; 131 _isOpen = false;
132 132
133 MojoEventStreamListener.fromHandle(int handle) { 133 MojoEventStreamListener.fromHandle(MojoHandle handle) {
134 _endpoint = new MojoMessagePipeEndpoint(new MojoHandle(handle)); 134 _endpoint = new MojoMessagePipeEndpoint(handle);
135 _eventStream = new MojoEventStream(_endpoint.handle); 135 _eventStream = new MojoEventStream(handle);
136 _isOpen = false; 136 _isOpen = false;
137 } 137 }
138 138
139 MojoEventStreamListener.unbound() :
140 _endpoint = null,
141 _eventStream = null,
142 _isOpen = false;
143
144 void bind(MojoMessagePipeEndpoint endpoint) {
145 assert(!isBound);
146 _endpoint = endpoint;
147 _eventStream = new MojoEventStream(endpoint.handle);
148 _isOpen = false;
149 }
150
151 void bindFromHandle(MojoHandle handle) {
152 assert(!isBound);
153 _endpoint = new MojoMessagePipeEndpoint(handle);
154 _eventStream = new MojoEventStream(handle);
155 _isOpen = false;
156 }
157
139 StreamSubscription<int> listen() { 158 StreamSubscription<int> listen() {
140 _isOpen = true; 159 _isOpen = true;
141 return _eventStream.listen((List<int> event) { 160 return _eventStream.listen((List<int> event) {
142 var signalsWatched = new MojoHandleSignals(event[0]); 161 var signalsWatched = new MojoHandleSignals(event[0]);
143 var signalsReceived = new MojoHandleSignals(event[1]); 162 var signalsReceived = new MojoHandleSignals(event[1]);
144 if (signalsReceived.isPeerClosed) { 163 if (signalsReceived.isPeerClosed) {
145 handlePeerClosed(); 164 handlePeerClosed();
146 // The peer being closed obviates any other signal we might 165 // The peer being closed obviates any other signal we might
147 // have received since we won't be able to read or write the handle. 166 // have received since we won't be able to read or write the handle.
148 // Thus, we just return before invoking other handlers. 167 // Thus, we just return before invoking other handlers.
(...skipping 12 matching lines...) Expand all
161 signalsWatched, signalsReceived)); 180 signalsWatched, signalsReceived));
162 _isInHandler = false; 181 _isInHandler = false;
163 }); 182 });
164 } 183 }
165 184
166 void close() { 185 void close() {
167 if (_isOpen) { 186 if (_isOpen) {
168 _eventStream.close(); 187 _eventStream.close();
169 _isOpen = false; 188 _isOpen = false;
170 _eventStream = null; 189 _eventStream = null;
190 _endpoint = null;
171 } 191 }
172 } 192 }
173 193
174 void handleRead() {} 194 void handleRead() {}
175 void handleWrite() {} 195 void handleWrite() {}
176 void handlePeerClosed() { 196 void handlePeerClosed() {
177 close(); 197 close();
178 } 198 }
179 199
180 MojoHandleSignals enableSignals(MojoHandleSignals watched, 200 MojoHandleSignals enableSignals(MojoHandleSignals watched,
181 MojoHandleSignals received) => watched; 201 MojoHandleSignals received) => watched;
182 202
183 MojoMessagePipeEndpoint get endpoint => _endpoint; 203 MojoMessagePipeEndpoint get endpoint => _endpoint;
184 bool get isOpen => _isOpen; 204 bool get isOpen => _isOpen;
185 bool get isInHandler => _isInHandler; 205 bool get isInHandler => _isInHandler;
206 bool get isBound => _endpoint != null;
186 } 207 }
OLDNEW
« no previous file with comments | « mojo/public/dart/src/data_pipe.dart ('k') | mojo/public/dart/src/interface.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698