Skip to content

Commit 1cac76a

Browse files
authored
fix: Add "Temp" and "Persistent" flags for RpcTarget options (#2792)
1 parent 3fd2bf5 commit 1cac76a

File tree

6 files changed

+410
-90
lines changed

6 files changed

+410
-90
lines changed

com.unity.netcode.gameobjects/Runtime/Messaging/RpcTargets/BaseRpcTarget.cs

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,35 @@
1+
using System;
2+
13
namespace Unity.Netcode
24
{
3-
public abstract class BaseRpcTarget
5+
public abstract class BaseRpcTarget : IDisposable
46
{
57
protected NetworkManager m_NetworkManager;
8+
private bool m_Locked;
9+
10+
internal void Lock()
11+
{
12+
m_Locked = true;
13+
}
14+
15+
internal void Unlock()
16+
{
17+
m_Locked = false;
18+
}
619

720
internal BaseRpcTarget(NetworkManager manager)
821
{
922
m_NetworkManager = manager;
1023
}
1124

25+
protected void CheckLockBeforeDispose()
26+
{
27+
if (m_Locked)
28+
{
29+
throw new Exception($"RPC targets obtained through {nameof(RpcTargetUse)}.{RpcTargetUse.Temp} may not be disposed.");
30+
}
31+
}
32+
1233
public abstract void Dispose();
1334

1435
internal abstract void Send(NetworkBehaviour behaviour, ref RpcMessage message, NetworkDelivery delivery, RpcParams rpcParams);

com.unity.netcode.gameobjects/Runtime/Messaging/RpcTargets/DirectSendRpcTarget.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ internal class DirectSendRpcTarget : BaseRpcTarget, IIndividualRpcTarget
88

99
public override void Dispose()
1010
{
11-
11+
CheckLockBeforeDispose();
1212
}
1313

1414
internal override void Send(NetworkBehaviour behaviour, ref RpcMessage message, NetworkDelivery delivery, RpcParams rpcParams)
@@ -25,5 +25,10 @@ internal DirectSendRpcTarget(NetworkManager manager) : base(manager)
2525
{
2626

2727
}
28+
29+
internal DirectSendRpcTarget(ulong clientId, NetworkManager manager) : base(manager)
30+
{
31+
ClientId = clientId;
32+
}
2833
}
2934
}

com.unity.netcode.gameobjects/Runtime/Messaging/RpcTargets/ProxyRpcTargetGroup.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ internal ProxyRpcTargetGroup(NetworkManager manager) : base(manager)
5656

5757
public override void Dispose()
5858
{
59+
CheckLockBeforeDispose();
5960
if (!m_Disposed)
6061
{
6162
TargetClientIds.Dispose();

0 commit comments

Comments
 (0)