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

Unified Diff: tests/standalone/io/socket_close_test.dart

Issue 27215002: Very simple version of Isolates. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Address comments. Created 7 years, 2 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « tests/standalone/io/process_shell_test.dart ('k') | tests/standalone/io/socket_many_connections_test.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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;
« no previous file with comments | « tests/standalone/io/process_shell_test.dart ('k') | tests/standalone/io/socket_many_connections_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698