Index: pkg/http/lib/src/streamed_request.dart |
diff --git a/pkg/http/lib/src/streamed_request.dart b/pkg/http/lib/src/streamed_request.dart |
index fac5151f355b9e4a5a61c02c2dbadd8f893c39ba..ded21e0b0756a9a725619fb249f2d87c2597a345 100644 |
--- a/pkg/http/lib/src/streamed_request.dart |
+++ b/pkg/http/lib/src/streamed_request.dart |
@@ -4,9 +4,11 @@ |
library streamed_request; |
+import 'dart:async'; |
import 'dart:io'; |
import 'dart:uri'; |
+import 'byte_stream.dart'; |
import 'base_request.dart'; |
/// An HTTP request where the request body is sent asynchronously after the |
@@ -15,36 +17,29 @@ import 'base_request.dart'; |
/// When the request is sent via [BaseClient.send], only the headers and |
/// whatever data has already been written to [StreamedRequest.stream] will be |
/// sent immediately. More data will be sent as soon as it's written to |
-/// [StreamedRequest.stream], and when the stream is closed the request will |
-/// end. |
+/// [StreamedRequest.sink], and when the sink is closed the request will end. |
class StreamedRequest extends BaseRequest { |
- /// The stream to which to write data that will be sent as the request body. |
+ /// The sink to which to write data that will be sent as the request body. |
/// This may be safely written to before the request is sent; the data will be |
/// buffered. |
/// |
/// Closing this signals the end of the request. |
- final OutputStream stream; |
+ Sink<List<int>> get sink => _controller.sink; |
- /// The stream from which the [BaseClient] will read the data in [stream] once |
- /// the request has been finalized. |
- final ListInputStream _inputStream; |
+ /// The controller for [sink], from which [BaseRequest] will read data for |
+ /// [finalize]. |
+ final StreamController<List<int>> _controller; |
/// Creates a new streaming request. |
StreamedRequest(String method, Uri url) |
: super(method, url), |
- stream = new ListOutputStream(), |
- _inputStream = new ListInputStream() { |
- ListOutputStream outputStream = stream; |
- // TODO(nweiz): pipe errors from the output stream to the input stream once |
- // issue 3657 is fixed |
- outputStream.onData = () => _inputStream.write(outputStream.read()); |
- outputStream.onClosed = _inputStream.markEndOfStream; |
- } |
+ _controller = new StreamController<List<int>>.singleSubscription(); |
- /// Freezes all mutable fields other than [stream] and returns an [InputStream] |
- /// that emits the data being written to [stream]. |
- InputStream finalize() { |
+ /// Freezes all mutable fields other than [stream] and returns a |
+ /// single-subscription [ByteStream] that emits the data being written to |
+ /// [sink]. |
+ ByteStream finalize() { |
super.finalize(); |
- return _inputStream; |
+ return new ByteStream(_controller); |
} |
} |