fromByteStream static method
Construct a response from byte stream (e.g. TCP socket)
Implementation
static Future<Response> fromByteStream(Stream<List<int>> data) async {
final List<int> partsBuffer = [];
final List<int> body = [];
// pipe stream into parts buffer until CRLF
// and then pipe to body buffer
bool partsEnd = false;
await for (final byte in data.expand((e) => e)) {
if (partsEnd) {
body.add(byte);
} else {
partsBuffer.add(byte);
if (partsBuffer.length >= 2 &&
byte == 10 &&
partsBuffer[partsBuffer.length - 2] == 13) {
partsEnd = true;
}
}
}
final parts = utf8.decode(partsBuffer.sublist(0, partsBuffer.length - 2));
final statusCode = int.parse(parts.substring(0, 2));
final meta = parts.substring(3);
return Response(statusCode: statusCode, meta: meta, body: body);
}