| OLD | NEW |
| 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 // | 4 // |
| 5 // Echo server test program for testing sockets. | 5 // Echo server test program for testing sockets. |
| 6 // | 6 // |
| 7 // VMOptions= | 7 // VMOptions= |
| 8 // VMOptions=--short_socket_read | 8 // VMOptions=--short_socket_read |
| 9 // VMOptions=--short_socket_write | 9 // VMOptions=--short_socket_write |
| 10 // VMOptions=--short_socket_read --short_socket_write | 10 // VMOptions=--short_socket_read --short_socket_write |
| 11 | 11 |
| 12 class EchoServerTest { | 12 class EchoServerTest { |
| 13 | 13 |
| 14 static void testMain() { | 14 static void testMain() { |
| 15 EchoServerGame echoServerGame = new EchoServerGame.start(); | 15 EchoServerGame echoServerGame = new EchoServerGame.start(); |
| 16 } | 16 } |
| 17 } | 17 } |
| 18 | 18 |
| 19 class EchoServerGame { | 19 class EchoServerGame { |
| 20 | 20 |
| 21 static final MSGSIZE = 10; | 21 static final MSGSIZE = 10; |
| 22 static final SERVERINIT = 0; | 22 static final SERVERINIT = 0; |
| 23 static final SERVERSHUTDOWN = -1; | 23 static final SERVERSHUTDOWN = -1; |
| 24 static final MESSAGES = 200; | 24 static final MESSAGES = 100; |
| 25 static final FIRSTCHAR = 65; | 25 static final FIRSTCHAR = 65; |
| 26 | 26 |
| 27 EchoServerGame.start() | 27 EchoServerGame.start() |
| 28 : _receivePort = new ReceivePort(), | 28 : _receivePort = new ReceivePort(), |
| 29 _sendPort = null, | 29 _sendPort = null, |
| 30 _buffer = new List<int>(MSGSIZE), | 30 _buffer = new List<int>(MSGSIZE), |
| 31 _messages = 0 { | 31 _messages = 0 { |
| 32 for (int i = 0; i < MSGSIZE; i++) { | 32 for (int i = 0; i < MSGSIZE; i++) { |
| 33 _buffer[i] = FIRSTCHAR + i; | 33 _buffer[i] = FIRSTCHAR + i; |
| 34 } | 34 } |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 66 sendData(); | 66 sendData(); |
| 67 } else { | 67 } else { |
| 68 shutdown(); | 68 shutdown(); |
| 69 } | 69 } |
| 70 } | 70 } |
| 71 } | 71 } |
| 72 | 72 |
| 73 handleRead(); | 73 handleRead(); |
| 74 } | 74 } |
| 75 | 75 |
| 76 void closeHandler() { | |
| 77 _socket.close(); | |
| 78 } | |
| 79 | |
| 80 void errorHandler() { | 76 void errorHandler() { |
| 81 print("Socket error"); | 77 Expect.fail("Socket error"); |
| 82 _socket.close(); | |
| 83 } | 78 } |
| 84 | 79 |
| 85 void connectHandler() { | 80 void connectHandler() { |
| 86 | 81 |
| 87 void writeMessage() { | 82 void writeMessage() { |
| 88 int bytesWritten = 0; | 83 int bytesWritten = 0; |
| 89 | 84 |
| 90 void handleWrite() { | 85 void handleWrite() { |
| 91 bytesWritten += _socket.writeList( | 86 bytesWritten += _socket.writeList( |
| 92 _buffer, bytesWritten, MSGSIZE - bytesWritten); | 87 _buffer, bytesWritten, MSGSIZE - bytesWritten); |
| 93 if (bytesWritten < MSGSIZE) { | 88 if (bytesWritten < MSGSIZE) { |
| 94 _socket.writeHandler = handleWrite; | 89 _socket.writeHandler = handleWrite; |
| 95 } | 90 } |
| 96 } | 91 } |
| 97 | 92 |
| 98 handleWrite(); | 93 handleWrite(); |
| 99 } | 94 } |
| 100 | 95 |
| 101 _socket.dataHandler = messageHandler; | 96 _socket.dataHandler = messageHandler; |
| 102 _socket.closeHandler = closeHandler; | |
| 103 _socket.errorHandler = errorHandler; | 97 _socket.errorHandler = errorHandler; |
| 104 writeMessage(); | 98 writeMessage(); |
| 105 } | 99 } |
| 106 | 100 |
| 107 _socket = new Socket(EchoServer.HOST, _port); | 101 _socket = new Socket(EchoServer.HOST, _port); |
| 108 if (_socket !== null) { | 102 if (_socket !== null) { |
| 109 _socket.connectHandler = connectHandler; | 103 _socket.connectHandler = connectHandler; |
| 110 } else { | 104 } else { |
| 111 Expect.fail("socket creation failed"); | 105 Expect.fail("Socket creation failed"); |
| 112 } | 106 } |
| 113 } | 107 } |
| 114 | 108 |
| 115 void start() { | 109 void start() { |
| 116 _receivePort.receive((var message, SendPort replyTo) { | 110 _receivePort.receive((var message, SendPort replyTo) { |
| 117 _port = message; | 111 _port = message; |
| 118 sendData(); | 112 sendData(); |
| 119 }); | 113 }); |
| 120 _sendPort.send(SERVERINIT, _receivePort.toSendPort()); | 114 _sendPort.send(SERVERINIT, _receivePort.toSendPort()); |
| 121 } | 115 } |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 167 void writeMessage() { | 161 void writeMessage() { |
| 168 | 162 |
| 169 int bytesWritten = 0; | 163 int bytesWritten = 0; |
| 170 | 164 |
| 171 void handleWrite() { | 165 void handleWrite() { |
| 172 int written = _client.writeList( | 166 int written = _client.writeList( |
| 173 buffer, bytesWritten, msgSize - bytesWritten); | 167 buffer, bytesWritten, msgSize - bytesWritten); |
| 174 bytesWritten += written; | 168 bytesWritten += written; |
| 175 if (bytesWritten < msgSize) { | 169 if (bytesWritten < msgSize) { |
| 176 _client.writeHandler = handleWrite; | 170 _client.writeHandler = handleWrite; |
| 171 } else { |
| 172 _client.close(true); |
| 177 } | 173 } |
| 178 } | 174 } |
| 179 handleWrite(); | 175 handleWrite(); |
| 180 } | 176 } |
| 181 writeMessage(); | 177 writeMessage(); |
| 182 } | 178 } |
| 183 } | 179 } |
| 184 } | 180 } |
| 185 | 181 |
| 186 handleRead(); | 182 handleRead(); |
| 187 } | 183 } |
| 188 | 184 |
| 189 void closeHandler() { | 185 void closeHandler() { |
| 190 _client.close(); | 186 _client.close(); |
| 191 } | 187 } |
| 192 | 188 |
| 193 void errorHandler() { | 189 void errorHandler() { |
| 194 print("Socket error"); | 190 Expect.fail("Socket error"); |
| 195 _client.close(); | |
| 196 } | 191 } |
| 197 | 192 |
| 198 _client = _server.accept(); | 193 _client = _server.accept(); |
| 199 _client.dataHandler = messageHandler; | 194 _client.dataHandler = messageHandler; |
| 200 _client.closeHandler = closeHandler; | 195 _client.closeHandler = closeHandler; |
| 201 _client.errorHandler = errorHandler; | 196 _client.errorHandler = errorHandler; |
| 202 } | 197 } |
| 203 | 198 |
| 204 void errorHandlerServer() { | 199 void errorHandlerServer() { |
| 205 print("Server socket error"); | 200 Expect.fail("Server socket error"); |
| 206 _server.close(); | |
| 207 } | 201 } |
| 208 | 202 |
| 209 this.port.receive((message, SendPort replyTo) { | 203 this.port.receive((message, SendPort replyTo) { |
| 210 if (message == EchoServerGame.SERVERINIT) { | 204 if (message == EchoServerGame.SERVERINIT) { |
| 211 _server = new ServerSocket(HOST, 0, 10); | 205 _server = new ServerSocket(HOST, 0, 10); |
| 212 Expect.equals(true, _server !== null); | 206 Expect.equals(true, _server !== null); |
| 213 _server.connectionHandler = connectionHandler; | 207 _server.connectionHandler = connectionHandler; |
| 214 _server.errorHandler = errorHandlerServer; | 208 _server.errorHandler = errorHandlerServer; |
| 215 replyTo.send(_server.port, null); | 209 replyTo.send(_server.port, null); |
| 216 } else if (message == EchoServerGame.SERVERSHUTDOWN) { | 210 } else if (message == EchoServerGame.SERVERSHUTDOWN) { |
| 217 _server.close(); | 211 _server.close(); |
| 218 this.port.close(); | 212 this.port.close(); |
| 219 } | 213 } |
| 220 }); | 214 }); |
| 221 } | 215 } |
| 222 | 216 |
| 223 ServerSocket _server; | 217 ServerSocket _server; |
| 224 } | 218 } |
| 225 | 219 |
| 226 main() { | 220 main() { |
| 227 EchoServerTest.testMain(); | 221 EchoServerTest.testMain(); |
| 228 } | 222 } |
| OLD | NEW |