| // Copyright (c) 2023, 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. |
| |
| import 'dart:convert'; |
| import 'dart:io'; |
| |
| import 'package:async/async.dart'; |
| import 'package:stream_channel/stream_channel.dart'; |
| |
| /// Converts a raw [Socket] into a [StreamChannel] of JSON objects. |
| /// |
| /// JSON messages are separated by newlines. |
| StreamChannel<Object?> jsonSocketStreamChannel(Socket socket) => |
| StreamChannel.withGuarantees(socket, socket) |
| .cast<List<int>>() |
| .transform(StreamChannelTransformer.fromCodec(utf8)) |
| .transformStream(const LineSplitter()) |
| .transformSink(StreamSinkTransformer.fromHandlers( |
| handleData: (original, sink) => sink.add('$original\n'))) |
| .transform(jsonDocument); |