Chromium Code Reviews| Index: sky/examples/terminal/terminal_file_impl.dart |
| diff --git a/sky/examples/terminal/terminal_file_impl.dart b/sky/examples/terminal/terminal_file_impl.dart |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..265fd5c66dace65c06e9a7369fffc577acfaa30f |
| --- /dev/null |
| +++ b/sky/examples/terminal/terminal_file_impl.dart |
| @@ -0,0 +1,126 @@ |
| +// Copyright 2015 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +import 'dart:async'; |
| +import 'dart:core'; |
| +import 'mojo:core'; |
| +import 'package:services/files/file.mojom.dart' as files; |
| +import 'package:services/files/types.mojom.dart' as files; |
| + |
| +import 'terminal_display.dart'; |
| + |
| +// This implements a |mojo.files.File| that acts like a (pseudo)terminal. Bytes |
| +// written to the |File| will be read by this implementation and passed on to |
| +// the (Dart) |TerminalDisplay| (using |putChar()|). A read from the |File| will |
| +// be completed if/when |TerminalDisplay| makes a byte available (via |
| +// |getChar()|). |
| +// TODO(vtl): This implementation is very incomplete. |
| +class TerminalFileImpl implements files.File { |
| + final files.FileStub stub; |
| + final TerminalDisplay _display; |
| + |
| + TerminalFileImpl(this._display) : stub = new files.FileStub.unbound() { |
| + stub.impl = this; |
| + } |
| + |
| + // |files.File| implementation: |
| + |
| + @override |
| + Future close(Function responseFactory) async { |
| + // TODO(vtl): We should probably do more than just say OK. |
| + return responseFactory(files.Error_OK); |
| + } |
| + |
| + @override |
| + Future read(int numBytesToRead, int offset, int whence, |
| + Function responseFactory) async { |
| + if (numBytesToRead < 0) { |
| + return responseFactory(files.Error_INVALID_ARGUMENT, null); |
| + } |
| + |
| + // TODO(vtl): Error if |offset|/|whence| not appropriate. |
| + |
| + if (numBytesToRead == 0) { |
| + return responseFactory(files.Error_OK, []); |
| + } |
| + |
| + return _display.getChar().then((c) { |
|
Elliot Glaysher
2015/03/11 20:55:43
If you're using async above, you might want to swi
viettrungluu
2015/03/11 21:25:18
Done.
|
| + return responseFactory(files.Error_OK, [c]); |
| + }); |
| + } |
| + |
| + @override |
| + Future write(List<int> bytesToWrite, int offset, int whence, |
| + Function responseFactory) async { |
| + // TODO(vtl): Error if |offset|/|whence| not appropriate. |
| + |
| + for (var c in bytesToWrite) { |
| + _display.putChar(c); |
| + } |
| + return responseFactory(files.Error_OK, bytesToWrite.length); |
| + } |
| + |
| + @override |
| + Future readToStream(MojoDataPipeProducer source, int offset, int whence, |
| + int numBytesToRead, Function responseFactory) async { |
| + // TODO(vtl) |
| + return responseFactory(files.Error_UNIMPLEMENTED); |
| + } |
| + |
| + @override |
| + Future writeFromStream(MojoDataPipeConsumer sink, int offset, int whence, |
| + Function responseFactory) async { |
| + // TODO(vtl) |
| + return responseFactory(files.Error_UNIMPLEMENTED); |
| + } |
| + |
| + @override |
| + Future tell(Function responseFactory) async { |
| + // TODO(vtl) |
| + return responseFactory(files.Error_UNIMPLEMENTED, 0); |
| + } |
| + |
| + @override |
| + Future seek(int offset, int whence, Function responseFactory) async { |
| + // TODO(vtl) |
| + return responseFactory(files.Error_UNIMPLEMENTED, 0); |
| + } |
| + |
| + @override |
| + Future stat(Function responseFactory) async { |
| + // TODO(vtl) |
| + return responseFactory(files.Error_UNIMPLEMENTED, null); |
| + } |
| + |
| + @override |
| + Future truncate(int size, Function responseFactory) async { |
| + // TODO(vtl) |
| + return responseFactory(files.Error_UNIMPLEMENTED); |
| + } |
| + |
| + @override |
| + Future touch(files.TimespecOrNow atime, files.TimespecOrNow mtime, |
| + Function responseFactory) async { |
| + // TODO(vtl) |
| + return responseFactory(files.Error_UNIMPLEMENTED); |
| + } |
| + |
| + @override |
| + Future dup(Object file, Function responseFactory) async { |
| + // TODO(vtl) |
| + return responseFactory(files.Error_UNIMPLEMENTED); |
| + } |
| + |
| + @override |
| + Future reopen(Object file, int openFlags, Function responseFactory) async { |
| + // TODO(vtl) |
| + return responseFactory(files.Error_UNIMPLEMENTED); |
| + } |
| + |
| + @override |
| + Future asBuffer(Function responseFactory) async { |
| + // TODO(vtl) |
| + return responseFactory(files.Error_UNIMPLEMENTED, null); |
| + } |
| +} |