createDataChannel method
dynamic
createDataChannel
(- int handleId,
- dynamic label,
- dynamic incoming,
- dynamic pendingData
)
Implementation
createDataChannel(int handleId, label, incoming, pendingData) {
Plugin pluginHandle = this.pluginHandles[handleId.toString()];
if (pluginHandle == null) {
Janus.warn("Invalid handle");
return;
}
Map<String, RTCDataChannel> dataChannels = pluginHandle.dataChannels;
var onDataChannelMessage = (event) {
Janus.log('Received message on data channel:' + event.toString());
var label = event.target.label;
pluginHandle.onData(event.data, label);
};
var onDataChannelStateChange = (state) {
Janus.log('Received state change on data channel:' + state.toString());
var label = state.label;
var dcState =
(dataChannels[label] != null) ? dataChannels[label].state : "null";
Janus.log('State change on <' + label + '> data channel: ' + dcState);
if (dcState == 'open') {
// FIX ME no params pending in RTCDataChannel to store pending message in flutter_webrtc
// Any pending messages to send?
// if (dataChannels[label].pending &&
// pluginHandle.dataChannels[label]['pending'].length > 0) {
// Janus.log("Sending pending messages on <" +
// label +
// ">:" +
// pluginHandle.dataChannels[label]['pending'].length.toString());
// for (var data in pluginHandle.dataChannels[label]['pending']) {
// Janus.log("Sending data on data channel <" + label + ">");
// Janus.debug(data);
// pluginHandle.dataChannels[label].send(data);
// }
// pluginHandle.dataChannels[label]['pending'] = [];
// }
// Notify the open data channel
pluginHandle.onDataOpen(label);
}
};
// var onDataChannelError =
// (error) => {Janus.error('Got error on data channel:' + error)};
if (incoming == null) {
Janus.log("Creating a data channel with label" + label);
// Add options (ordered, maxRetransmits, etc.)
RTCDataChannelInit rtcDataChannel = RTCDataChannelInit();
pluginHandle.pc
.createDataChannel(label, rtcDataChannel)
.then((RTCDataChannel channel) {
dataChannels[label] = channel;
}).catchError((error, StackTrace trace) {
Janus.error(error.toString());
});
} else {
// The channel was created by Janus
dataChannels[label] = incoming;
}
dataChannels[label].onMessage = onDataChannelMessage;
dataChannels[label].onDataChannelState = onDataChannelStateChange;
// FIX me these calls do not exists, need to implement these in onDataChannelStateChange
// dataChannels[label].onclose = onDataChannelStateChange;
// dataChannels[label].onerror = onDataChannelError;
// dataChannels[label].pending = [];
// if (pendingData != null)
// pluginHandle.dataChannels[label]['pending'].add(pendingData);
}