Index: runtime/bin/vmservice/vmservice_dartium.dart |
diff --git a/runtime/bin/vmservice/vmservice_dartium.dart b/runtime/bin/vmservice/vmservice_dartium.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..c1520ec674288aa9735a014729c965611cd7db13 |
--- /dev/null |
+++ b/runtime/bin/vmservice/vmservice_dartium.dart |
@@ -0,0 +1,60 @@ |
+// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
+// for details. All rights reserved. Use of this source code is governed by a |
+// BSD-style license that can be found in the LICENSE file. |
+ |
+library vmservice_dartium; |
+ |
+import 'dart:isolate'; |
+import 'vmservice.dart'; |
+ |
+// The receive port that isolate startup / shutdown messages are delivered on. |
+RawReceivePort _receivePort; |
+// The receive port that service request messages are delivered on. |
+RawReceivePort _requestPort; |
+ |
+// The native method that is called to post the response back to DevTools. |
+void postResponse(String response, int cookie) native "PostResponse"; |
+ |
+void handleRequest(service, String uri, cookie) { |
+ var serviceRequest = new ServiceRequest(); |
+ var r = serviceRequest.parse(Uri.parse(uri)); |
+ if (!r) { |
+ // Did not understand the request uri. |
+ serviceRequest.setErrorResponse('Invalid request uri: ${uri}'); |
+ } else { |
+ var f = service.runningIsolates.route(serviceRequest); |
+ if (f != null) { |
+ f.then((_) { |
+ postResponse(serviceRequest.response, cookie); |
+ }).catchError((e) { }); |
+ return; |
+ } else { |
+ // Nothing responds to this type of request. |
+ serviceRequest.setErrorResponse('No route for: $uri'); |
+ } |
+ } |
+ postResponse(serviceRequest.response, cookie); |
+} |
+ |
+main() { |
+ // Create VmService. |
+ var service = new VMService(); |
+ _receivePort = service.receivePort; |
+ _requestPort = new RawReceivePort((message) { |
+ if (message == null) { |
+ return; |
+ } |
+ if (message is! List) { |
+ return; |
+ } |
+ if (message.length != 2) { |
+ return; |
+ } |
+ var uri = message[0]; |
+ if (uri is! String) { |
+ return; |
+ } |
+ var cookie = message[1]; |
+ handleRequest(service, uri, cookie); |
+ }); |
+} |