- 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