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

Side by Side Diff: sdk/lib/io/console.dart

Issue 807833002: Revert "Make stdout/stderr async" (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Addressed review commetns Created 5 years, 11 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
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
3 // BSD-style license that can be found in the LICENSE file.
4
5 part of dart.io;
6
7 Console _console;
8
9 Console get console {
10 if (_console == null) {
11 _console = new Console._();
12 }
13 return _console;
14 }
15
16 /**
17 * [Console] provides synchronous write access to stdout and stderr.
18 *
19 * The direct access to stdout and stderr through [stdout] and [stderr]
20 * provides non-blocking async operations.
21 */
22 class Console {
23 final ConsoleSink _stdout;
24 final ConsoleSink _stderr;
25
26 Console._()
27 : _stdout = new ConsoleSink._(1),
28 _stderr = new ConsoleSink._(2);
29
30 /**
31 * Write to stdout.
32 */
33 ConsoleSink get log => _stdout;
34
35 /**
36 * Write to stderr.
37 */
38 ConsoleSink get error => _stderr;
39 }
40
41 /**
42 * Sink class used for console writing.
43 *
44 * This class has a call method so you can call it directly. Calling
45 * it directly is the same as calling its `writeln` method.
46 */
47 class ConsoleSink implements Sink<List<int>>, StringSink {
48 IOSink _sink;
49
50 ConsoleSink._(int fd) {
51 _sink = new IOSink(new _ConsoleConsumer(fd));
52 }
53
54 void call([Object message = ""]) => _sink.writeln(message);
55
56 void add(List<int> data) => _sink.add(data);
57
58 void close() {}
59
60 void write(Object obj) => _sink.write(obj);
61
62 void writeAll(Iterable objects, [String separator=""]) =>
63 _sink.writeAll(objects, separator);
64
65 void writeCharCode(int charCode) => _sink.writeCharCode(charCode);
66
67 void writeln([Object obj=""]) => _sink.writeln(obj);
68 }
69
70 class _ConsoleConsumer implements StreamConsumer<List<int>> {
71 final _file;
72
73 _ConsoleConsumer(int fd) : _file = _File._openStdioSync(fd);
74
75 Future addStream(Stream<List<int>> stream) {
76 var completer = new Completer();
77 var sub;
78 sub = stream.listen(
79 (data) {
80 try {
81 _file.writeFromSync(data);
82 } catch (e, s) {
83 sub.cancel();
84 completer.completeError(e, s);
85 }
86 },
87 onError: completer.completeError,
88 onDone: completer.complete,
89 cancelOnError: true);
90 return completer.future;
91 }
92
93 Future close() {
94 _file.closeSync();
95 return new Future.value();
96 }
97 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698