- From: Simon Chan <notifications@github.com>
- Date: Wed, 23 Feb 2022 18:46:35 -0800
- To: whatwg/streams <streams@noreply.github.com>
- Cc: Subscribed <subscribed@noreply.github.com>
- Message-ID: <whatwg/streams/issues/1222@github.com>
Now I have this API: ```ts export function adbSyncPush( stream: AdbBufferedStream, writer: WritableStreamDefaultWriter<Uint8Array>, filename: string, mode: number = (LinuxFileType.File << 12) | 0o666, mtime: number = (Date.now() / 1000) | 0, packetSize: number = ADB_SYNC_MAX_PACKET_SIZE, ): WritableStream<Uint8Array> { // FIXME: `ChunkStream` can't forward `close` Promise. const { readable, writable } = new ChunkStream(packetSize); readable.pipeTo(new WritableStream<Uint8Array>({ async start() { const pathAndMode = `${filename},${mode.toString()}`; await adbSyncWriteRequest(writer, AdbSyncRequestId.Send, pathAndMode); }, async write(chunk) { await adbSyncWriteRequest(writer, AdbSyncRequestId.Data, chunk); }, async close() { await adbSyncWriteRequest(writer, AdbSyncRequestId.Done, mtime); await adbSyncReadResponse(stream, ResponseTypes); } }, { highWaterMark: 16 * 1024, size(chunk) { return chunk.byteLength; } })); return writable; } ``` It returns a `WrtiableStream` to let the caller write a file on device, the `close` handler tells the device to finish the file and return the final result. Let's call it `PushFileStream`. Because each packet can't exceed `packetSize` length, I need to split each incoming `chunk`s. I think I can re-use the `ChunkStream` (a `TransformStream`) that's used somewhere else, so I piped the `readable` end to `PushFileStream`, and returned the writable end of the `ChunkStream` to callers. It can correctly chunk the incoming data and send them to device, however, the `writable` of `ChunkStream` won't wait for `close` of `PushFileStream`. If the caller want to close the `stream` and `writer` after finishing pushing, they may be closed before `close`, causing push to fail. So how can I wait for `PushFileStream` `close`, or how can I generally use `TransformStream` when creating a `WritableStream`? -- Reply to this email directly or view it on GitHub: https://github.com/whatwg/streams/issues/1222 You are receiving this because you are subscribed to this thread. Message ID: <whatwg/streams/issues/1222@github.com>
Received on Thursday, 24 February 2022 02:46:47 UTC