1 using System.ComponentModel;
3 * Copyright (c) 2021 Samsung Electronics Co., Ltd All Rights Reserved
5 * Licensed under the Apache License, Version 2.0 (the License);
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
9 * http://www.apache.org/licenses/LICENSE-2.0
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an AS IS BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
21 namespace Tizen.Multimedia.Remoting
24 /// Provides the ability to control WebRTC data channel.
26 /// <since_tizen> 9 </since_tizen>
27 public partial class WebRTCDataChannel
29 private NativeDataChannel.OpenedCallback _webRtcDataChannelOpenedCallback;
30 private NativeDataChannel.ClosedCallback _webRtcDataChannelClosedCallback;
31 private NativeDataChannel.MessageReceivedCallback _webRtcDataChannelMsgRecvCallback;
32 private NativeDataChannel.ErrorOccurredCallback _webRtcDataChannelErrorOccurredCallback;
33 private NativeDataChannel.BufferedAmountLowThresholdCallback _webRtcDataChannelBufferedAmountLowThresholdCallback;
35 private event EventHandler<EventArgs> _opened;
36 private event EventHandler<EventArgs> _closed;
37 private event EventHandler<WebRTCDataChannelMessageReceivedEventArgs> _messageReceived;
38 private event EventHandler<WebRTCDataChannelErrorOccurredEventArgs> _errorOccurred;
39 private event EventHandler<EventArgs> _bufferedAmountLowThresholdOccurred;
42 /// Occurs when the data channel's underlying data transport is established.
44 /// <since_tizen> 9 </since_tizen>
45 public event EventHandler<EventArgs> Opened
51 RegisterDataChannelOpenedCallback();
60 UnregisterDataChannelOpenedCallback();
66 /// Occurs when the data channel has closed down.
68 /// <since_tizen> 9 </since_tizen>
69 public event EventHandler<EventArgs> Closed
75 RegisterDataChannelClosedCallback();
84 UnregisterDataChannelClosedCallback();
90 /// Occurs when a message is received from the remote peer.
92 /// <since_tizen> 9 </since_tizen>
93 public event EventHandler<WebRTCDataChannelMessageReceivedEventArgs> MessageReceived
97 if (_messageReceived == null)
99 RegisterDataChannelMessageReceivedCallback();
101 _messageReceived += value;
105 _messageReceived -= value;
106 if (_messageReceived == null)
108 UnregisterDataChannelMessageReceivedCallback();
114 /// Occurs when an error occurs on the data channel.
116 /// <since_tizen> 9 </since_tizen>
117 public event EventHandler<WebRTCDataChannelErrorOccurredEventArgs> ErrorOccurred
121 if (_errorOccurred == null)
123 RegisterDataChannelErrorOccurredCallback();
125 _errorOccurred += value;
129 _errorOccurred -= value;
130 if (_errorOccurred == null)
132 UnregisterDataChannelErrorOccurredCallback();
138 /// Occurs when the buffered data amount is lower than <see cref="BufferedAmountLowThreshold"/>.<br/>
139 /// If <see cref="BufferedAmountLowThreshold"/> is not set, this event will not be raised.
141 /// <since_tizen> 10 </since_tizen>
142 public event EventHandler<EventArgs> BufferedAmountLow
146 if (_bufferedAmountLowThresholdOccurred == null)
148 RegisterDataChannelBufferedAmountLowThresholdCallback();
150 _bufferedAmountLowThresholdOccurred += value;
154 _bufferedAmountLowThresholdOccurred -= value;
155 if (_bufferedAmountLowThresholdOccurred == null)
157 UnregisterDataChannelBufferedAmountLowThresholdCallback();
162 private void RegisterDataChannelOpenedCallback()
164 _webRtcDataChannelOpenedCallback = (dataChannelHandle, _) =>
166 _opened?.Invoke(this, new EventArgs());
169 NativeDataChannel.SetOpenedCb(_handle, _webRtcDataChannelOpenedCallback).
170 ThrowIfFailed("Failed to set data channel opened callback.");
173 private void UnregisterDataChannelOpenedCallback()
175 NativeDataChannel.UnsetOpenedCb(_handle).
176 ThrowIfFailed("Failed to unset data channel opened callback.");
179 private void RegisterDataChannelClosedCallback()
181 _webRtcDataChannelClosedCallback = (dataChannelHandle, _) =>
183 _closed?.Invoke(this, new EventArgs());
186 NativeDataChannel.SetClosedCb(_handle, _webRtcDataChannelClosedCallback).
187 ThrowIfFailed("Failed to set data channel closed callback.");
190 private void UnregisterDataChannelClosedCallback()
192 NativeDataChannel.UnsetClosedCb(_handle).
193 ThrowIfFailed("Failed to unset data channel closed callback.");
196 private void RegisterDataChannelMessageReceivedCallback()
198 _webRtcDataChannelMsgRecvCallback = (dataChannelHandle, type, message, _) =>
200 _messageReceived?.Invoke(this, new WebRTCDataChannelMessageReceivedEventArgs(type, message));
203 NativeDataChannel.SetMessageReceivedCb(_handle, _webRtcDataChannelMsgRecvCallback).
204 ThrowIfFailed("Failed to set data channel message received callback.");
207 private void UnregisterDataChannelMessageReceivedCallback()
209 NativeDataChannel.UnsetMessageReceivedCb(_handle).
210 ThrowIfFailed("Failed to unset data channel message received callback.");
213 private void RegisterDataChannelErrorOccurredCallback()
215 _webRtcDataChannelErrorOccurredCallback = (dataChannelHandle, error, _) =>
217 _errorOccurred?.Invoke(this, new WebRTCDataChannelErrorOccurredEventArgs((WebRTCError)error));
220 NativeDataChannel.SetErrorOccurredCb(_handle, _webRtcDataChannelErrorOccurredCallback).
221 ThrowIfFailed("Failed to set data channel error callback.");
224 private void UnregisterDataChannelErrorOccurredCallback()
226 NativeDataChannel.UnsetErrorOccurredCb(_handle).
227 ThrowIfFailed("Failed to unset data channel error callback.");
230 private void RegisterDataChannelBufferedAmountLowThresholdCallback()
232 if (_webRtcDataChannelBufferedAmountLowThresholdCallback == null)
234 _webRtcDataChannelBufferedAmountLowThresholdCallback = (dataChannelHanel, _) =>
236 _bufferedAmountLowThresholdOccurred?.Invoke(this, new EventArgs());
240 NativeDataChannel.SetBufferedAmountLowThresholdCb(_handle, _bufferThreshold.Value,
241 _webRtcDataChannelBufferedAmountLowThresholdCallback).
242 ThrowIfFailed("Failed to set buffered amount low threshold callback.");
245 private void UnregisterDataChannelBufferedAmountLowThresholdCallback()
247 NativeDataChannel.UnsetBufferedAmountLowThresholdCb(_handle).
248 ThrowIfFailed("Failed to unset buffered amount low threshold callback.");