File tree Expand file tree Collapse file tree 5 files changed +76
-5
lines changed Expand file tree Collapse file tree 5 files changed +76
-5
lines changed Original file line number Diff line number Diff line change @@ -56,7 +56,7 @@ public void Dispose()
56
56
if ( value == null )
57
57
continue ;
58
58
var disposable = value as IDisposable ;
59
- disposable . Dispose ( ) ;
59
+ disposable ? . Dispose ( ) ;
60
60
}
61
61
table . Clear ( ) ;
62
62
Original file line number Diff line number Diff line change 3
3
4
4
namespace Unity . WebRTC
5
5
{
6
- public class RTCRtpReceiver
6
+ /// <summary>
7
+ ///
8
+ /// </summary>
9
+ public class RTCRtpReceiver : IDisposable
7
10
{
8
11
internal IntPtr self ;
9
12
private RTCPeerConnection peer ;
13
+ private bool disposed ;
10
14
11
15
internal RTCRtpReceiver ( IntPtr ptr , RTCPeerConnection peer )
12
16
{
13
17
self = ptr ;
18
+ WebRTC . Table . Add ( self , this ) ;
14
19
this . peer = peer ;
15
20
}
16
21
22
+ ~ RTCRtpReceiver ( )
23
+ {
24
+ this . Dispose ( ) ;
25
+ }
26
+
27
+ public virtual void Dispose ( )
28
+ {
29
+ if ( this . disposed )
30
+ {
31
+ return ;
32
+ }
33
+ if ( self != IntPtr . Zero && ! WebRTC . Context . IsNull )
34
+ {
35
+ WebRTC . Table . Remove ( self ) ;
36
+ self = IntPtr . Zero ;
37
+ }
38
+ this . disposed = true ;
39
+ GC . SuppressFinalize ( this ) ;
40
+ }
41
+
17
42
/// <summary>
18
43
///
19
44
/// </summary>
Original file line number Diff line number Diff line change @@ -6,17 +6,40 @@ namespace Unity.WebRTC
6
6
/// <summary>
7
7
///
8
8
/// </summary>
9
- public class RTCRtpSender
9
+ public class RTCRtpSender : IDisposable
10
10
{
11
11
internal IntPtr self ;
12
12
private RTCPeerConnection peer ;
13
+ private bool disposed ;
14
+
13
15
14
16
internal RTCRtpSender ( IntPtr ptr , RTCPeerConnection peer )
15
17
{
16
18
self = ptr ;
19
+ WebRTC . Table . Add ( self , this ) ;
17
20
this . peer = peer ;
18
21
}
19
22
23
+ ~ RTCRtpSender ( )
24
+ {
25
+ this . Dispose ( ) ;
26
+ }
27
+
28
+ public virtual void Dispose ( )
29
+ {
30
+ if ( this . disposed )
31
+ {
32
+ return ;
33
+ }
34
+ if ( self != IntPtr . Zero && ! WebRTC . Context . IsNull )
35
+ {
36
+ WebRTC . Table . Remove ( self ) ;
37
+ self = IntPtr . Zero ;
38
+ }
39
+ this . disposed = true ;
40
+ GC . SuppressFinalize ( this ) ;
41
+ }
42
+
20
43
/// <summary>
21
44
///
22
45
/// </summary>
Original file line number Diff line number Diff line change @@ -48,15 +48,23 @@ public RTCRtpTransceiverDirection? CurrentDirection
48
48
/// </summary>
49
49
public RTCRtpReceiver Receiver
50
50
{
51
- get { return new RTCRtpReceiver ( NativeMethods . TransceiverGetReceiver ( self ) , peer ) ; }
51
+ get
52
+ {
53
+ IntPtr receiverPtr = NativeMethods . TransceiverGetReceiver ( self ) ;
54
+ return WebRTC . FindOrCreate ( receiverPtr , ptr => new RTCRtpReceiver ( ptr , peer ) ) ;
55
+ }
52
56
}
53
57
54
58
/// <summary>
55
59
///
56
60
/// </summary>
57
61
public RTCRtpSender Sender
58
62
{
59
- get { return new RTCRtpSender ( NativeMethods . TransceiverGetSender ( self ) , peer ) ; }
63
+ get
64
+ {
65
+ IntPtr senderPtr = NativeMethods . TransceiverGetSender ( self ) ;
66
+ return WebRTC . FindOrCreate ( senderPtr , ptr => new RTCRtpSender ( ptr , peer ) ) ;
67
+ }
60
68
}
61
69
62
70
public RTCErrorType SetCodecPreferences ( RTCRtpCodecCapability [ ] codecs )
Original file line number Diff line number Diff line change @@ -227,6 +227,21 @@ public void GetAndSetDirectionTransceiver()
227
227
peer . Dispose ( ) ;
228
228
}
229
229
230
+ [ Test ]
231
+ [ Category ( "PeerConnection" ) ]
232
+ public void GetTransceivers ( )
233
+ {
234
+ var peer = new RTCPeerConnection ( ) ;
235
+ var track = new AudioStreamTrack ( "audio" ) ;
236
+
237
+ var sender = peer . AddTrack ( track ) ;
238
+ Assert . That ( peer . GetTransceivers ( ) . ToList ( ) , Has . Count . EqualTo ( 1 ) ) ;
239
+ Assert . That ( peer . GetTransceivers ( ) . Select ( t => t . Sender ) . ToList ( ) , Has . Member ( sender ) ) ;
240
+
241
+ track . Dispose ( ) ;
242
+ peer . Dispose ( ) ;
243
+ }
244
+
230
245
[ UnityTest ]
231
246
[ Timeout ( 1000 ) ]
232
247
[ Category ( "PeerConnection" ) ]
You can’t perform that action at this time.
0 commit comments