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

Side by Side Diff: sdk/lib/vmservice/message.dart

Issue 2059883003: DevFS initial implementation (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 6 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 | « runtime/vm/vm_sources.gypi ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, 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._vmservice; 5 part of dart._vmservice;
6 6
7 class Message { 7 class Message {
8 final Completer _completer = new Completer.sync(); 8 final Completer _completer = new Completer.sync();
9 bool get completed => _completer.isCompleted; 9 bool get completed => _completer.isCompleted;
10 /// Future of response. 10 /// Future of response.
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
109 _completer.complete(JSON.encode({ 109 _completer.complete(JSON.encode({
110 'type': 'ServiceError', 110 'type': 'ServiceError',
111 'id': '', 111 'id': '',
112 'kind': 'InternalError', 112 'kind': 'InternalError',
113 'message': 'could not send message [${serial}] to isolate', 113 'message': 'could not send message [${serial}] to isolate',
114 })); 114 }));
115 } 115 }
116 return _completer.future; 116 return _completer.future;
117 } 117 }
118 118
119 // We currently support two ways of passing parameters from Dart code to C
120 // code. The original way always converts the parameters to strings before
121 // passing them over. Our goal is to convert all C handlers to take the
122 // parameters as Dart objects but until the conversion is complete, we
123 // maintain the list of supported methods below.
124 bool _methodNeedsObjectParameters(String method) {
125 switch (method) {
126 case '_listDevFS':
127 case '_listDevFSFiles':
128 case '_createDevFS':
129 case '_deleteDevFS':
130 case '_writeDevFSFile':
131 case '_writeDevFSFiles':
132 case '_readDevFSFile':
133 return true;
134 default:
135 return false;
136 }
137 }
138
119 Future<String> sendToVM() { 139 Future<String> sendToVM() {
120 final receivePort = new RawReceivePort(); 140 final receivePort = new RawReceivePort();
121 receivePort.handler = (value) { 141 receivePort.handler = (value) {
122 receivePort.close(); 142 receivePort.close();
123 _completer.complete(value); 143 _completer.complete(value);
124 }; 144 };
125 var keys = _makeAllString(params.keys.toList(growable:false)); 145 if (_methodNeedsObjectParameters(method)) {
126 var values = _makeAllString(params.values.toList(growable:false)); 146 // We use a different method invocation path here.
127 var request = new List(6) 147 var keys = params.keys.toList(growable:false);
128 ..[0] = 0 // Make room for OOB message type. 148 var values = params.values.toList(growable:false);
129 ..[1] = receivePort.sendPort 149 var request = new List(6)
130 ..[2] = serial 150 ..[0] = 0 // Make room for OOB message type.
131 ..[3] = method 151 ..[1] = receivePort.sendPort
132 ..[4] = keys 152 ..[2] = serial
133 ..[5] = values; 153 ..[3] = method
134 sendRootServiceMessage(request); 154 ..[4] = keys
135 return _completer.future; 155 ..[5] = values;
156 sendObjectRootServiceMessage(request);
157 return _completer.future;
158 } else {
159 var keys = _makeAllString(params.keys.toList(growable:false));
160 var values = _makeAllString(params.values.toList(growable:false));
161 var request = new List(6)
162 ..[0] = 0 // Make room for OOB message type.
163 ..[1] = receivePort.sendPort
164 ..[2] = serial
165 ..[3] = method
166 ..[4] = keys
167 ..[5] = values;
168 sendRootServiceMessage(request);
169 return _completer.future;
170 }
136 } 171 }
137 172
138 void setResponse(String response) { 173 void setResponse(String response) {
139 _completer.complete(response); 174 _completer.complete(response);
140 } 175 }
141 176
142 void setErrorResponse(int code, String details) { 177 void setErrorResponse(int code, String details) {
143 _completer.complete(encodeRpcError(this, code, 178 _completer.complete(encodeRpcError(this, code,
144 details: '$method: $details')); 179 details: '$method: $details'));
145 } 180 }
146 } 181 }
147 182
148 external bool sendIsolateServiceMessage(SendPort sp, List m); 183 external bool sendIsolateServiceMessage(SendPort sp, List m);
149 external void sendRootServiceMessage(List m); 184 external void sendRootServiceMessage(List m);
185 external void sendObjectRootServiceMessage(List m);
OLDNEW
« no previous file with comments | « runtime/vm/vm_sources.gypi ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698