- From: Domenic Denicola via GitHub <sysbot+gh@w3.org>
- Date: Thu, 20 Aug 2015 17:20:44 +0000
- To: public-secondscreen@w3.org
domenic has just created a new issue for
https://github.com/w3c/presentation-api:
== PresentationSession should have stream interfaces! ==
Hi all,
My apologies for not looking bringing this up this sooner. But I just
looked at the spec for the first time, and realized that
PresentationSession is basically duplicating a lot of the work and
interface that is going in to
[streams](https://streams.spec.whatwg.org/)! I'd like to see if you
are interested in, in a future revision, adding direct support for the
stream data types.
Similar to promises for async operations, readable streams are meant
to be a universal primitive for things that need to be read from, and
writable streams for things that need to be written to. So, adding
readable and writable stream interfaces to PresentationSession would
let them interoperate with the rest of the streaming ecosystem, and be
consumed by libraries that are meant to operate on generic streams.
For example, you could do things like
```js
fetch("http://example.com/somebytes").then(res => {
res.body.pipeTo(myPresentationSession.writable);
});
```
to set up a [pipe chain](https://streams.spec.whatwg.org/#pipe-chains)
between the data retrieved from fetch and that sent to the
presentation session. It would properly apply backpressure and so on.
Or you could do streaming uploads of received data, with
```js
fetch("http://example.com/dest", { body:
myPresentationSession.readable });
```
---
The concrete proposal would roughly be that we add a `.readable`
property that is a ReadableStream, and a `.writable` property that is
a WritableStream. The chunk type would be Uint8Array, most likely, to
match fetch. You could use these directly (e.g. `const reader =
session.readable.getReader(); reader.read().then(processNextMessage)`)
to get the same functionality as your current `"message"` event and
`send()` APIs---although the pull-based `read()` API has [some big
advantages](https://github.com/whatwg/streams/blob/master/Requirements.md#creating-readable-streams)
over the push-based `"message"` one. But the real benefits would
come, as shown in the examples above, when used by any generic
stream-consuming or producing APIs. Again, the situation is analogous
to promises---slightly nicer, but the real benefit comes from building
an ecosystem that uses them.
We wouldn't modify any of the existing stuff on
PresentationSession---just like we have legacy APIs in the platform
that have both promise and callback interfaces, this would be an API
that has both ad-hoc reading/writing interfaces and standard
streams-based ones. If I'd caught this sooner, maybe we'd have a
chance, but as-is it seems too late, especially given that I still
have some work to do before I'd say writable stream is stable enough
for other specs to consume :-/.
---
WDYT?! If this sounds agreeable, I could try to put together a PR.
You've already done much of the hard work by specifying "send a
message through a PresentationSession S" and friends. It would largely
be setting up some glue for creating the streams appropriately, as in
https://domenic.github.io/streaming-mediastreams/#msr-constructor
See https://github.com/w3c/presentation-api/issues/163
Received on Thursday, 20 August 2015 17:20:46 UTC