Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, 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 part of dart.io; | 5 part of dart.io; |
| 6 | 6 |
| 7 const int _STDIO_HANDLE_TYPE_TERMINAL = 0; | 7 const int _STDIO_HANDLE_TYPE_TERMINAL = 0; |
| 8 const int _STDIO_HANDLE_TYPE_PIPE = 1; | 8 const int _STDIO_HANDLE_TYPE_PIPE = 1; |
| 9 const int _STDIO_HANDLE_TYPE_FILE = 2; | 9 const int _STDIO_HANDLE_TYPE_FILE = 2; |
| 10 const int _STDIO_HANDLE_TYPE_SOCKET = 3; | 10 const int _STDIO_HANDLE_TYPE_SOCKET = 3; |
| 11 const int _STDIO_HANDLE_TYPE_OTHER = 4; | 11 const int _STDIO_HANDLE_TYPE_OTHER = 4; |
| 12 | 12 |
| 13 class _Stdin extends Stream<List<int>> { | |
| 14 final Stream<List<int>> _stdin; | |
| 15 | |
| 16 _Stdin(Stream<List<int>> this._stdin); | |
| 17 | |
| 18 StreamSubscription<List<int>> listen(void onData(List<int> event), | |
| 19 {void onError(AsyncError error), | |
| 20 void onDone(), | |
| 21 bool unsubscribeOnError}) { | |
| 22 return _stdin.listen( | |
| 23 onData, | |
| 24 onError: onError, | |
| 25 onDone: onDone, | |
| 26 unsubscribeOnError: unsubscribeOnError); | |
| 27 } | |
| 28 } | |
| 29 | |
| 30 class _StdSink implements IOSink { | |
| 31 final IOSink _ioSink; | |
| 32 | |
| 33 _StdSink(IOSink this._ioSink); | |
| 34 | |
| 35 Encoding get encoding => _ioSink.encoding; | |
| 36 void set encoding(Encoding encoding) { | |
| 37 _ioSink.encoding = encoding; | |
| 38 } | |
| 39 void write(object) => _ioSink.write(object); | |
| 40 void writeln([object = "" ]) => _ioSink.writeln(object); | |
| 41 void writeAll(objects, [sep = ""]) => _ioSink.writeAll(objects, sep); | |
| 42 void writeBytes(List<int> data) => _ioSink.writeBytes(data); | |
| 43 void writeCharCode(int charCode) => _ioSink.writeCharCode(charCode); | |
| 44 Future<T> consume(Stream<List<int>> stream) => _ioSink.consume(stream); | |
|
ahe
2013/04/08 12:25:25
The use of T without having T declared causes a wa
Anders Johnsen
2013/06/11 12:15:04
Yeah, bad testing from my side. Sorry
https://cod
| |
| 45 Future<T> addStream(Stream<List<int>> stream) => _ioSink.addStream(stream); | |
| 46 Future<T> writeStream(Stream<List<int>> stream) | |
| 47 => _ioSink.writeStream(stream); | |
| 48 Future close() => _ioSink.close(); | |
| 49 Future<T> get done => _ioSink.done; | |
| 50 } | |
| 13 | 51 |
| 14 class StdioType { | 52 class StdioType { |
| 15 static const StdioType TERMINAL = const StdioType._("terminal"); | 53 static const StdioType TERMINAL = const StdioType._("terminal"); |
| 16 static const StdioType PIPE = const StdioType._("pipe"); | 54 static const StdioType PIPE = const StdioType._("pipe"); |
| 17 static const StdioType FILE = const StdioType._("file"); | 55 static const StdioType FILE = const StdioType._("file"); |
| 18 static const StdioType OTHER = const StdioType._("other"); | 56 static const StdioType OTHER = const StdioType._("other"); |
| 19 final String name; | 57 final String name; |
| 20 const StdioType._(String this.name); | 58 const StdioType._(String this.name); |
| 21 String toString() => "StdioType: $name"; | 59 String toString() => "StdioType: $name"; |
| 22 } | 60 } |
| (...skipping 22 matching lines...) Expand all Loading... | |
| 45 | 83 |
| 46 IOSink get stderr { | 84 IOSink get stderr { |
| 47 if (_stderr == null) { | 85 if (_stderr == null) { |
| 48 _stderr = _StdIOUtils._getStdioOutputStream(2); | 86 _stderr = _StdIOUtils._getStdioOutputStream(2); |
| 49 } | 87 } |
| 50 return _stderr; | 88 return _stderr; |
| 51 } | 89 } |
| 52 | 90 |
| 53 | 91 |
| 54 StdioType stdioType(object) { | 92 StdioType stdioType(object) { |
| 93 if (object is _Stdin) { | |
| 94 object = object._stdin; | |
| 95 } else if (object is _StdSink) { | |
| 96 object = object._ioSink; | |
| 97 } | |
| 55 if (object is _FileStream) { | 98 if (object is _FileStream) { |
| 56 return StdioType.FILE; | 99 return StdioType.FILE; |
| 57 } | 100 } |
| 58 if (object is Socket) { | 101 if (object is Socket) { |
| 59 switch (_StdIOUtils._socketType(object._nativeSocket)) { | 102 switch (_StdIOUtils._socketType(object._nativeSocket)) { |
| 60 case _STDIO_HANDLE_TYPE_TERMINAL: return StdioType.TERMINAL; | 103 case _STDIO_HANDLE_TYPE_TERMINAL: return StdioType.TERMINAL; |
| 61 case _STDIO_HANDLE_TYPE_PIPE: return StdioType.PIPE; | 104 case _STDIO_HANDLE_TYPE_PIPE: return StdioType.PIPE; |
| 62 case _STDIO_HANDLE_TYPE_FILE: return StdioType.FILE; | 105 case _STDIO_HANDLE_TYPE_FILE: return StdioType.FILE; |
| 63 } | 106 } |
| 64 } | 107 } |
| 65 if (object is IOSink) { | 108 if (object is IOSink) { |
| 66 try { | 109 try { |
| 67 if (object._target is _FileStreamConsumer) { | 110 if (object._target is _FileStreamConsumer) { |
| 68 return StdioType.FILE; | 111 return StdioType.FILE; |
| 69 } | 112 } |
| 70 } catch (e) { | 113 } catch (e) { |
| 71 // Only the interface implemented, _sink not available. | 114 // Only the interface implemented, _sink not available. |
| 72 } | 115 } |
| 73 } | 116 } |
| 74 return StdioType.OTHER; | 117 return StdioType.OTHER; |
| 75 } | 118 } |
| 76 | 119 |
| 77 | 120 |
| 78 class _StdIOUtils { | 121 class _StdIOUtils { |
| 79 external static IOSink _getStdioOutputStream(int fd); | 122 external static IOSink _getStdioOutputStream(int fd); |
| 80 external static Stream<List<int>> _getStdioInputStream(); | 123 external static Stream<List<int>> _getStdioInputStream(); |
| 81 external static int _socketType(nativeSocket); | 124 external static int _socketType(nativeSocket); |
| 82 } | 125 } |
| OLD | NEW |