Index: samples/sample_extension/sample_asynchronous_extension_no_autoscope.dart |
=================================================================== |
--- samples/sample_extension/sample_asynchronous_extension_no_autoscope.dart (revision 0) |
+++ samples/sample_extension/sample_asynchronous_extension_no_autoscope.dart (revision 0) |
@@ -0,0 +1,42 @@ |
+// Copyright (c) 2012, 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 sample_asynchronous_extension_no_autoscope; |
+ |
+import 'dart:async'; |
+import 'dart:isolate'; |
+import 'dart-ext:sample_extension_no_autoscope'; |
+ |
+// A class caches the native port used to call an asynchronous extension. |
+class RandomArray { |
+ static SendPort _port; |
+ |
+ Future<List<int> > randomArray(int seed, int length) { |
+ var completer = new Completer(); |
+ var replyPort = new RawReceivePort(); |
+ var args = new List(3); |
+ args[0] = seed; |
+ args[1] = length; |
+ args[2] = replyPort.sendPort; |
+ _servicePort.send(args); |
+ replyPort.handler = (result) { |
+ replyPort.close(); |
+ if (result != null) { |
+ completer.complete(result); |
+ } else { |
+ completer.completeError(new Exception("Random array creation failed")); |
+ } |
+ }; |
+ return completer.future; |
+ } |
+ |
+ SendPort get _servicePort { |
+ if (_port == null) { |
+ _port = _newServicePort(); |
+ } |
+ return _port; |
+ } |
+ |
+ SendPort _newServicePort() native "RandomArray_ServicePort"; |
+} |