| // Copyright (c) 2017, 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. |
| |
| @JS() |
| library _; |
| |
| import 'package:js/js.dart'; |
| import 'package:stream_channel/stream_channel.dart'; |
| import 'package:test_api/src/utils.dart'; // ignore: implementation_imports |
| |
| @JS("require") |
| external _Net _require(String module); |
| |
| @JS("process.argv") |
| external List<String> get _args; |
| |
| @JS() |
| class _Net { |
| external _Socket connect(int port); |
| } |
| |
| @JS() |
| class _Socket { |
| external setEncoding(String encoding); |
| external on(String event, void callback(String chunk)); |
| external write(String data); |
| } |
| |
| /// Returns a [StreamChannel] of JSON-encodable objects that communicates over a |
| /// socket whose port is given by `process.argv[2]`. |
| StreamChannel<Object> socketChannel() { |
| var controller = |
| StreamChannelController<String>(allowForeignErrors: false, sync: true); |
| var net = _require("net"); |
| var socket = net.connect(int.parse(_args[2])); |
| socket.setEncoding("utf8"); |
| |
| controller.local.stream.listen((chunk) => socket.write(chunk)); |
| socket.on("data", allowInterop(controller.local.sink.add)); |
| |
| return controller.foreign.transform(chunksToLines).transform(jsonDocument); |
| } |