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 class SocketInputStream2 implements InputStream2 { |
| 6 SocketInputStream2(Socket socket) { |
| 7 _socket = socket; |
| 8 } |
| 9 |
| 10 List<int> read() { |
| 11 // Return whatever data is available. |
| 12 int available = _socket.available(); |
| 13 if (available == 0) { |
| 14 return null; |
| 15 } |
| 16 List<int> buffer = new List<int>(available); |
| 17 int read = _socket.readList(buffer, 0, available); |
| 18 if (read < available) { |
| 19 List<int> newBuffer = new List<int>(read); |
| 20 newBuffer.copyFrom(buffer, 0, 0, read); |
| 21 return newBuffer; |
| 22 } else { |
| 23 return buffer; |
| 24 } |
| 25 } |
| 26 |
| 27 void set dataHandler(void callback()) { |
| 28 _socket.setDataHandler(callback); |
| 29 } |
| 30 |
| 31 void set closeHandler(void callback()) { |
| 32 _socket.setCloseHandler(callback); |
| 33 } |
| 34 |
| 35 void set errorHandler(void callback(int error)) { |
| 36 _socket.setErrorHandler( |
| 37 void _() { callback(-1); } |
| 38 ); |
| 39 } |
| 40 |
| 41 Socket _socket; |
| 42 } |
| 43 |
| 44 |
5 class SocketInputStream implements InputStream { | 45 class SocketInputStream implements InputStream { |
6 SocketInputStream(Socket socket) { | 46 SocketInputStream(Socket socket) { |
7 _socket = socket; | 47 _socket = socket; |
8 _buffer = null; | 48 _buffer = null; |
9 } | 49 } |
10 | 50 |
11 bool read(List<int> buffer, int offset, int len, void callback()) { | 51 bool read(List<int> buffer, int offset, int len, void callback()) { |
12 // Read data just out of the buffer. | 52 // Read data just out of the buffer. |
13 if (_buffer !== null && len <= _buffer.length) { | 53 if (_buffer !== null && len <= _buffer.length) { |
14 buffer.copyFrom(_buffer, 0, offset, len); | 54 buffer.copyFrom(_buffer, 0, offset, len); |
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
147 Socket _socket; | 187 Socket _socket; |
148 | 188 |
149 /* | 189 /* |
150 * Read and readUntil read data out of that buffer first before reading new | 190 * Read and readUntil read data out of that buffer first before reading new |
151 * data out of the socket. | 191 * data out of the socket. |
152 */ | 192 */ |
153 List<int> _buffer; | 193 List<int> _buffer; |
154 } | 194 } |
155 | 195 |
156 class SocketOutputStream implements OutputStream { | 196 class SocketOutputStream implements OutputStream { |
157 SocketOutputStream(Socket socket) { | 197 SocketOutputStream(Socket socket) : _socket = socket; |
158 _socket = socket; | |
159 } | |
160 | 198 |
161 bool write(List<int> buffer, int offset, int len, void callback()) { | 199 bool write(List<int> buffer, int offset, int len, void callback()) { |
162 int bytesWritten = _socket.writeList(buffer, offset, len); | 200 int bytesWritten = _socket.writeList(buffer, offset, len); |
163 | 201 |
164 void finishWrite() { | 202 void finishWrite() { |
165 bytesWritten += _socket.writeList( | 203 bytesWritten += _socket.writeList( |
166 buffer, offset + bytesWritten, len - bytesWritten); | 204 buffer, offset + bytesWritten, len - bytesWritten); |
167 if (bytesWritten < len) { | 205 if (bytesWritten < len) { |
168 _socket.setWriteHandler(finishWrite); | 206 _socket.setWriteHandler(finishWrite); |
169 } else { | 207 } else { |
170 assert(bytesWritten == len); | 208 assert(bytesWritten == len); |
171 if (callback !== null) { | 209 if (callback !== null) { |
172 callback(); | 210 callback(); |
173 } | 211 } |
174 } | 212 } |
175 } | 213 } |
176 | 214 |
177 if (bytesWritten == len) { | 215 if (bytesWritten == len) { |
178 return true; | 216 return true; |
179 } | 217 } |
180 _socket.setWriteHandler(finishWrite); | 218 _socket.setWriteHandler(finishWrite); |
181 return false; | 219 return false; |
182 } | 220 } |
183 | 221 |
184 Socket _socket; | 222 Socket _socket; |
185 } | 223 } |
OLD | NEW |