Skip to content

Commit e58b969

Browse files
authored
fix: The comparing result of RTCRtpSender is wrong (#304)
* fix bugs * fix bugs
1 parent 5492951 commit e58b969

File tree

5 files changed

+76
-5
lines changed

5 files changed

+76
-5
lines changed

Runtime/Scripts/Context.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ public void Dispose()
5656
if (value == null)
5757
continue;
5858
var disposable = value as IDisposable;
59-
disposable.Dispose();
59+
disposable?.Dispose();
6060
}
6161
table.Clear();
6262

Runtime/Scripts/RTCRtpReceiver.cs

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,42 @@
33

44
namespace Unity.WebRTC
55
{
6-
public class RTCRtpReceiver
6+
/// <summary>
7+
///
8+
/// </summary>
9+
public class RTCRtpReceiver : IDisposable
710
{
811
internal IntPtr self;
912
private RTCPeerConnection peer;
13+
private bool disposed;
1014

1115
internal RTCRtpReceiver(IntPtr ptr, RTCPeerConnection peer)
1216
{
1317
self = ptr;
18+
WebRTC.Table.Add(self, this);
1419
this.peer = peer;
1520
}
1621

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+
1742
/// <summary>
1843
///
1944
/// </summary>

Runtime/Scripts/RTCRtpSender.cs

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,40 @@ namespace Unity.WebRTC
66
/// <summary>
77
///
88
/// </summary>
9-
public class RTCRtpSender
9+
public class RTCRtpSender : IDisposable
1010
{
1111
internal IntPtr self;
1212
private RTCPeerConnection peer;
13+
private bool disposed;
14+
1315

1416
internal RTCRtpSender(IntPtr ptr, RTCPeerConnection peer)
1517
{
1618
self = ptr;
19+
WebRTC.Table.Add(self, this);
1720
this.peer = peer;
1821
}
1922

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+
2043
/// <summary>
2144
///
2245
/// </summary>

Runtime/Scripts/RTCRtpTransceiver.cs

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,15 +48,23 @@ public RTCRtpTransceiverDirection? CurrentDirection
4848
/// </summary>
4949
public RTCRtpReceiver Receiver
5050
{
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+
}
5256
}
5357

5458
/// <summary>
5559
///
5660
/// </summary>
5761
public RTCRtpSender Sender
5862
{
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+
}
6068
}
6169

6270
public RTCErrorType SetCodecPreferences(RTCRtpCodecCapability[] codecs)

Tests/Runtime/PeerConnectionTest.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,21 @@ public void GetAndSetDirectionTransceiver()
227227
peer.Dispose();
228228
}
229229

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+
230245
[UnityTest]
231246
[Timeout(1000)]
232247
[Category("PeerConnection")]

0 commit comments

Comments
 (0)