blob: df140d2ecd7eccf292a1edb0c9f3b2fdd82ca1d4 [file] [log] [blame]
/*
* 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.
*/
import "dart:async";
import "dart:isolate";
void iMain(List data) {
SendPort replyPort=data[0];
SendPort replyPort2=data[1];
ReceivePort receivePort = new ReceivePort();
ReceivePort receivePort2 = new ReceivePort();
replyPort2.send([receivePort.sendPort, receivePort2.sendPort]);
receivePort.listen((var element){
// print(" replyPort.send($element)");
replyPort.send(element);
}
);
receivePort2.listen((var element){
// print(" receivePort.close()");
replyPort2.send(null);
receivePort.close();
receivePort2.close();
}
);
}
ReceivePort fromFuture(Future content) {
var element;
bool completed=false;
SendPort sendPort;
SendPort sendPort2;
void sendElement() {
if (sendPort!=null && completed) {
// print("sendPort.send($element)");
sendPort.send(element);
// print("sendPort2.send(null)");
sendPort2.send(null);
}
}
content.then((value) {
element=value; completed=true;
sendElement();
});
ReceivePort receivePort = new ReceivePort();
ReceivePort receivePort2 = new ReceivePort();
Isolate.spawn(iMain, [receivePort.sendPort, receivePort2.sendPort]);
receivePort2.listen((portList){
if (portList!=null) {
sendPort=portList[0];
sendPort2=portList[1];
sendElement();
} else {
// print("receivePort.close()");
receivePort.close();
receivePort2.close();
}
});
return receivePort;
}
ReceivePort fromIterable(Iterable content) {
ReceivePort receivePort = new ReceivePort();
ReceivePort receivePort2 = new ReceivePort();
Isolate.spawn(iMain, [receivePort.sendPort, receivePort2.sendPort]);
receivePort2.listen((portList){
if (portList!=null) {
SendPort sendPort=portList[0];
SendPort sendPort2=portList[1];
for (var element in content) {
// print("sendPort.send($element)");
sendPort.send(element);
}
// print("sendPort2.send(null)");
sendPort2.send(null);
} else {
// print("receivePort.close()");
receivePort.close();
receivePort2.close();
}
});
return receivePort;
}