- From: Adam Bergkvist <adam.bergkvist@ericsson.com>
- Date: Mon, 27 Feb 2012 19:03:32 +0100
- To: "public-webrtc@w3.org" <public-webrtc@w3.org>
Hi
Added a third example that uses the DataChannelInit dictionary to
configure a DataChannel.
On 02/22/2012 05:32 PM, Adam Bergkvist wrote:
> Hi
>
> I got a task from the WebRTC chairs and editors to work some more with
> the Data API, taking Justins proposal as a starting point, meet what
> most people seem to want
> (http://lists.w3.org/Archives/Public/public-webrtc/2012Feb/0153.html)
> from the API and align with the Web Socket API as far as possible.
> Comments and feedback are greatly appreciated.
>
> A DataChannel object is bi-directional data channel that is decoupled
> from the MediaStream concept. I.e., there are no local or remote
> DataChannels since data can be written to, and read from the same
> object. When a DataChannel is created at one end of a PeerConnection, an
> event, with the corresponding DataChannel, is dispatched on the other
> end. There's no need to remove a DataChannel object from it's associated
> PeerConnection; the close() method disposes the channel similar to
> WebSocket. The DataChanelInit dictionary is used to configure a
> DataChannel at creation time; it will be extended as we expose more
> configuration possibilities.
>
> Some examples:
>
> // Simple example how to create a DataChannel, send and receive data.
>
> var chan = peerConn.createDataChannel("mylabel");
>
> chan.onmessage = function (evt) {
> // use evt.data
> };
>
> chan.send("hello");
>
> -----
>
> // Example of to handle the case when a remote peer creates a DataChannel
>
> peerConn.ondatachannel = function (evt) {
> var chan = evt.channel;
>
> chan.onmessage = function (evt) {
> // use evt.data
> };
>
> chan.onclose = function () {
> // remote side closed the data channel
> };
> };
>
> ----
// Example of creating two DataChannel objects with different
// properties (by using the init dictionary)
// we want the chat channel to be reliable and not as prioritized as
// game data
var chatChan = peerConn.createDataChannel("chat", { "priority": 1 });
// unreliable high performance channel for game data
var gameDataChan = peerConn.createDataChannel("data", { "reliable":
false, "priority": 10 });
> Below are the IDLs of this API.
>
> *** Changes to PeerConnection ***
>
> interface PeerConnection {
> ...
>
> DataChannel createDataChannel(DOMString? label, optional
> DataChannelInit? dataChannelDict);
>
> attribute Function? ondatachannel;
> ...
> };
>
>
> *** DataChannel ***
>
> interface DataChannel {
> readonly attribute DOMString label;
>
> readonly attribute boolean reliable;
> readonly attribute long priority;
> // ... extend here ...
> };
> DataChannel implements AbstractMessenger;
>
> interface AbstractMessenger {
> // ready state
> const unsigned short CONNECTING = 0;
> const unsigned short OPEN = 1;
> const unsigned short CLOSING = 2;
> const unsigned short CLOSED = 3;
> readonly attribute unsigned short readyState;
> readonly attribute unsigned long bufferedAmount;
>
> // networking
> [TreatNonCallableAsNull] attribute Function? onopen;
> [TreatNonCallableAsNull] attribute Function? onerror;
> [TreatNonCallableAsNull] attribute Function? onclose;
> void close([Clamp] optional unsigned short code, optional DOMString
> reason);
>
> // messaging
> [TreatNonCallableAsNull] attribute Function? onmessage;
> attribute DOMString binaryType;
> void send(DOMString data);
> void send(ArrayBuffer data);
> void send(Blob data);
> };
>
>
> *** Dictionaries and Events ***
>
> dictionary DataChannelInit {
> boolean reliable;
> long priority;
> // ... extend here ...
> };
>
> [Constructor(DOMString type, optional DataChannelEventInit eventInitDict)]
> interface DataChannelEvent : Event {
> readonly attribute DataChannel? channel;
> };
>
> dictionary DataChannelEventInit : EventInit {
> DataChannel? channel;
> };
>
> /Adam
>
Received on Monday, 27 February 2012 18:09:14 UTC