Index: tests/standalone/io/socket_close_test.dart |
diff --git a/tests/standalone/io/socket_close_test.dart b/tests/standalone/io/socket_close_test.dart |
index 39905e363456a2390ad8d5018f9837b5aa1dfc80..475d97a53eefce8873a40be44e6a0a7d48078629 100644 |
--- a/tests/standalone/io/socket_close_test.dart |
+++ b/tests/standalone/io/socket_close_test.dart |
@@ -20,17 +20,21 @@ const SERVERSHUTDOWN = -1; |
const ITERATIONS = 10; |
+Future sendReceive(SendPort port, message) { |
+ ReceivePort receivePort = new ReceivePort(); |
+ port.send([message, receivePort.sendPort]); |
+ return receivePort.first; |
+} |
+ |
class SocketClose { |
SocketClose.start(this._mode, this._done) |
- : _receivePort = new ReceivePort(), |
- _sendPort = null, |
+ : _sendPort = null, |
_readBytes = 0, |
_dataEvents = 0, |
_closeEvents = 0, |
_errorEvents = 0, |
_iterations = 0 { |
- _sendPort = spawnFunction(startSocketCloseServer); |
initialize(); |
} |
@@ -142,19 +146,20 @@ class SocketClose { |
} |
void initialize() { |
- _receivePort.receive((var message, SendPort replyTo) { |
- _port = message; |
- proceed(); |
+ ReceivePort receivePort = new ReceivePort(); |
+ var remote = Isolate.spawn(startSocketCloseServer, receivePort.sendPort); |
+ |
+ receivePort.first.then((message) { |
+ this._sendPort = message; |
+ sendReceive(_sendPort, _mode).then((int port) { |
+ this._port = port; |
+ proceed(); |
+ }); |
}); |
- _sendPort.send(_mode, _receivePort.toSendPort()); |
} |
void shutdown() { |
- _sendPort.send(SERVERSHUTDOWN, _receivePort.toSendPort()); |
- _receivePort.receive((message, ignore) { |
- _done(); |
- _receivePort.close(); |
- }); |
+ sendReceive(_sendPort, SERVERSHUTDOWN).then((_) { _done(); }); |
switch (_mode) { |
case 0: |
@@ -184,7 +189,6 @@ class SocketClose { |
} |
int _port; |
- ReceivePort _receivePort; |
SendPort _sendPort; |
List<int> _buffer; |
int _readBytes; |
@@ -204,16 +208,18 @@ class ConnectionData { |
} |
-void startSocketCloseServer() { |
+void startSocketCloseServer(SendPort replyTo) { |
var server = new SocketCloseServer(); |
- port.receive(server.dispatch); |
+ replyTo.send(server.dispatchSendPort); |
} |
class SocketCloseServer { |
static const HOST = "127.0.0.1"; |
- SocketCloseServer() : super() {} |
+ SocketCloseServer() : _dispatchPort = new ReceivePort() { |
+ _dispatchPort.listen(dispatch); |
+ } |
void connectionHandler(ConnectionData data) { |
var connection = data.connection; |
@@ -325,22 +331,26 @@ class SocketCloseServer { |
} |
Expect.equals(0, _errorEvents); |
_server.close(); |
- port.close(); |
+ _dispatchPort.close(); |
_donePort.send(null); |
} else { |
new Timer(new Duration(milliseconds: 100), waitForResult); |
} |
} |
- void dispatch(message, SendPort replyTo) { |
+ SendPort get dispatchSendPort => _dispatchPort.sendPort; |
+ |
+ void dispatch(message) { |
+ var command = message[0]; |
+ SendPort replyTo = message[1]; |
_donePort = replyTo; |
- if (message != SERVERSHUTDOWN) { |
+ if (command != SERVERSHUTDOWN) { |
_readBytes = 0; |
_errorEvents = 0; |
_dataEvents = 0; |
_closeEvents = 0; |
_iterations = 0; |
- _mode = message; |
+ _mode = command; |
ServerSocket.bind("127.0.0.1", 0).then((server) { |
_server = server; |
_server.listen( |
@@ -358,6 +368,7 @@ class SocketCloseServer { |
} |
ServerSocket _server; |
+ final ReceivePort _dispatchPort; |
SendPort _donePort; |
int _readBytes; |
int _errorEvents; |