Index: runtime/bin/socket_stream_impl.dart |
diff --git a/runtime/bin/socket_stream_impl.dart b/runtime/bin/socket_stream_impl.dart |
deleted file mode 100644 |
index f3072be2a0c0507cac4b83310b64d89e8e78bf44..0000000000000000000000000000000000000000 |
--- a/runtime/bin/socket_stream_impl.dart |
+++ /dev/null |
@@ -1,230 +0,0 @@ |
-// Copyright (c) 2012, 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. |
- |
-class _SocketInputStream implements InputStream { |
- _SocketInputStream(Socket socket) : _socket = socket { |
- if (_socket._closed) _closed = true; |
- _socket.onClosed = _onClosed; |
- } |
- |
- List<int> read([int len]) { |
- int bytesToRead = available(); |
- if (bytesToRead == 0) return null; |
- if (len !== null) { |
- if (len <= 0) { |
- throw new StreamException("Illegal length $len"); |
- } else if (bytesToRead > len) { |
- bytesToRead = len; |
- } |
- } |
- List<int> buffer = new Uint8List(bytesToRead); |
- int bytesRead = _socket.readList(buffer, 0, bytesToRead); |
- if (bytesRead == 0) { |
- // On MacOS when reading from a tty Ctrl-D will result in one |
- // byte reported as available. Attempting to read it out will |
- // result in zero bytes read. When that happens there is no data |
- // which is indicated by a null return value. |
- return null; |
- } else if (bytesRead < bytesToRead) { |
- List<int> newBuffer = new Uint8List(bytesRead); |
- newBuffer.setRange(0, bytesRead, buffer); |
- return newBuffer; |
- } else { |
- return buffer; |
- } |
- } |
- |
- int readInto(List<int> buffer, [int offset = 0, int len]) { |
- if (_closed) return null; |
- if (len === null) len = buffer.length; |
- if (offset < 0) throw new StreamException("Illegal offset $offset"); |
- if (len < 0) throw new StreamException("Illegal length $len"); |
- return _socket.readList(buffer, offset, len); |
- } |
- |
- int available() => _socket.available(); |
- |
- void pipe(OutputStream output, {bool close: true}) { |
- _pipe(this, output, close: close); |
- } |
- |
- void close() { |
- if (!_closed) { |
- _socket.close(); |
- } |
- } |
- |
- bool get closed => _closed; |
- |
- void set onData(void callback()) { |
- _socket._onData = callback; |
- } |
- |
- void set onClosed(void callback()) { |
- _clientCloseHandler = callback; |
- _socket._onClosed = _onClosed; |
- } |
- |
- void set onError(void callback(e)) { |
- _onError = callback; |
- } |
- |
- void _onClosed() { |
- _closed = true; |
- if (_clientCloseHandler !== null) { |
- _clientCloseHandler(); |
- } |
- } |
- |
- void _onSocketError(e) { |
- close(); |
- if (_onError != null) { |
- _onError(e); |
- return true; |
- } else { |
- return false; |
- } |
- } |
- |
- Socket _socket; |
- bool _closed = false; |
- Function _clientCloseHandler; |
- Function _onError; |
-} |
- |
- |
-class _SocketOutputStream |
- extends _BaseOutputStream implements OutputStream { |
- _SocketOutputStream(Socket socket) |
- : _socket = socket, _pendingWrites = new _BufferList(); |
- |
- bool write(List<int> buffer, [bool copyBuffer = true]) { |
- return _write(buffer, 0, buffer.length, copyBuffer); |
- } |
- |
- bool writeFrom(List<int> buffer, [int offset = 0, int len]) { |
- return _write( |
- buffer, offset, (len == null) ? buffer.length - offset : len, true); |
- } |
- |
- void flush() { |
- // Nothing to do on a socket output stream. |
- } |
- |
- void close() { |
- if (_closing && _closed) return; |
- if (!_pendingWrites.isEmpty) { |
- // Mark the socket for close when all data is written. |
- _closing = true; |
- _socket._onWrite = _onWrite; |
- } else { |
- // Close the socket for writing. |
- _socket._closeWrite(); |
- _closed = true; |
- // Invoke the callback asynchronously. |
- new Timer(0, (t) { |
- if (_onClosed != null) _onClosed(); |
- }); |
- } |
- } |
- |
- void destroy() { |
- _socket.onWrite = null; |
- _pendingWrites.clear(); |
- _socket.close(); |
- _closed = true; |
- } |
- |
- bool get closed => _closed; |
- |
- void set onNoPendingWrites(void callback()) { |
- _onNoPendingWrites = callback; |
- if (_onNoPendingWrites != null) { |
- _socket._onWrite = _onWrite; |
- } |
- } |
- |
- void set onClosed(void callback()) { |
- _onClosed = callback; |
- } |
- |
- bool _write(List<int> buffer, int offset, int len, bool copyBuffer) { |
- if (_closing || _closed) throw new StreamException("Stream closed"); |
- int bytesWritten = 0; |
- if (_pendingWrites.isEmpty) { |
- // If nothing is buffered write as much as possible and buffer |
- // the rest. |
- bytesWritten = _socket.writeList(buffer, offset, len); |
- if (bytesWritten == len) return true; |
- } |
- |
- // Place remaining data on the pending writes queue. |
- int notWrittenOffset = offset + bytesWritten; |
- if (copyBuffer) { |
- List<int> newBuffer = |
- buffer.getRange(notWrittenOffset, len - bytesWritten); |
- _pendingWrites.add(newBuffer); |
- } else { |
- assert(offset + len == buffer.length); |
- _pendingWrites.add(buffer, notWrittenOffset); |
- } |
- _socket._onWrite = _onWrite; |
- return false; |
- } |
- |
- void _onWrite() { |
- // Write as much buffered data to the socket as possible. |
- while (!_pendingWrites.isEmpty) { |
- List<int> buffer = _pendingWrites.first; |
- int offset = _pendingWrites.index; |
- int bytesToWrite = buffer.length - offset; |
- int bytesWritten; |
- try { |
- bytesWritten = _socket.writeList(buffer, offset, bytesToWrite); |
- } catch (e) { |
- _pendingWrites.clear(); |
- _onSocketError(e); |
- return; |
- } |
- _pendingWrites.removeBytes(bytesWritten); |
- if (bytesWritten < bytesToWrite) { |
- _socket._onWrite = _onWrite; |
- return; |
- } |
- } |
- |
- // All buffered data was written. |
- if (_closing) { |
- _socket._closeWrite(); |
- _closed = true; |
- if (_onClosed != null) { |
- _onClosed(); |
- } |
- } else { |
- if (_onNoPendingWrites != null) _onNoPendingWrites(); |
- } |
- if (_onNoPendingWrites == null) { |
- _socket._onWrite = null; |
- } else { |
- _socket._onWrite = _onWrite; |
- } |
- } |
- |
- bool _onSocketError(e) { |
- close(); |
- if (_onError != null) { |
- _onError(e); |
- return true; |
- } else { |
- return false; |
- } |
- } |
- |
- Socket _socket; |
- _BufferList _pendingWrites; |
- Function _onNoPendingWrites; |
- Function _onClosed; |
- bool _closing = false; |
- bool _closed = false; |
-} |