Skip to content

Commit 15d5bef

Browse files
refactor!: remove network variable settings, network behaviour cleanup (#1097)
* refactor!: remove network variable settings, network behaviour cleanup * remove ensure initialized * moved init, removed unused var * refactor!: remove network variable settings, network behaviour cleanup * remove ensure initialized * whitespace / include fixes
1 parent 3796565 commit 15d5bef

16 files changed

+141
-237
lines changed

com.unity.netcode.gameobjects/Runtime/Core/NetworkBehaviour.cs

Lines changed: 35 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -425,7 +425,7 @@ internal void InitializeVariables()
425425
sortedFields[i].SetValue(this, instance);
426426
}
427427

428-
instance.NetworkBehaviour = this;
428+
instance.Initialize(this);
429429

430430
var instanceNameProperty = fieldType.GetProperty(nameof(NetworkVariableBase.Name));
431431
var sanitizedVariableName = sortedFields[i].Name.Replace("<", string.Empty).Replace(">k__BackingField", string.Empty);
@@ -624,15 +624,15 @@ private bool CouldHaveDirtyNetworkVariables()
624624
return false;
625625
}
626626

627-
internal static void HandleNetworkVariableDeltas(List<NetworkVariableBase> networkVariableList, Stream stream, ulong clientId, NetworkBehaviour logInstance, NetworkManager networkManager)
627+
internal void HandleNetworkVariableDeltas(Stream stream, ulong clientId)
628628
{
629629
using (var reader = PooledNetworkReader.Get(stream))
630630
{
631-
for (int i = 0; i < networkVariableList.Count; i++)
631+
for (int i = 0; i < NetworkVariableFields.Count; i++)
632632
{
633633
ushort varSize = 0;
634634

635-
if (networkManager.NetworkConfig.EnsureNetworkVariableLengthSafety)
635+
if (NetworkManager.NetworkConfig.EnsureNetworkVariableLengthSafety)
636636
{
637637
varSize = reader.ReadUInt16Packed();
638638

@@ -649,15 +649,15 @@ internal static void HandleNetworkVariableDeltas(List<NetworkVariableBase> netwo
649649
}
650650
}
651651

652-
if (networkManager.IsServer && !networkVariableList[i].CanClientWrite(clientId))
652+
if (NetworkManager.IsServer && !NetworkVariableFields[i].CanClientWrite(clientId))
653653
{
654654
// we are choosing not to fire an exception here, because otherwise a malicious client could use this to crash the server
655-
if (networkManager.NetworkConfig.EnsureNetworkVariableLengthSafety)
655+
if (NetworkManager.NetworkConfig.EnsureNetworkVariableLengthSafety)
656656
{
657657
if (NetworkLog.CurrentLogLevel <= LogLevel.Normal)
658658
{
659-
NetworkLog.LogWarning($"Client wrote to {typeof(NetworkVariable<>).Name} without permission. => {(logInstance != null ? ($"{nameof(NetworkObjectId)}: {logInstance.NetworkObjectId} - {nameof(NetworkObject.GetNetworkBehaviourOrderIndex)}(): {logInstance.NetworkObject.GetNetworkBehaviourOrderIndex(logInstance)} - VariableIndex: {i}") : string.Empty)}");
660-
NetworkLog.LogError($"[{networkVariableList[i].GetType().Name}]");
659+
NetworkLog.LogWarning($"Client wrote to {typeof(NetworkVariable<>).Name} without permission. => {nameof(NetworkObjectId)}: {NetworkObjectId} - {nameof(NetworkObject.GetNetworkBehaviourOrderIndex)}(): {NetworkObject.GetNetworkBehaviourOrderIndex(this)} - VariableIndex: {i}");
660+
NetworkLog.LogError($"[{NetworkVariableFields[i].GetType().Name}]");
661661
}
662662

663663
stream.Position += varSize;
@@ -673,32 +673,33 @@ internal static void HandleNetworkVariableDeltas(List<NetworkVariableBase> netwo
673673
// - TwoTen
674674
if (NetworkLog.CurrentLogLevel <= LogLevel.Error)
675675
{
676-
NetworkLog.LogError($"Client wrote to {typeof(NetworkVariable<>).Name} without permission. No more variables can be read. This is critical. => {(logInstance != null ? ($"{nameof(NetworkObjectId)}: {logInstance.NetworkObjectId} - {nameof(NetworkObject.GetNetworkBehaviourOrderIndex)}(): {logInstance.NetworkObject.GetNetworkBehaviourOrderIndex(logInstance)} - VariableIndex: {i}") : string.Empty)}");
677-
NetworkLog.LogError($"[{networkVariableList[i].GetType().Name}]");
676+
NetworkLog.LogError($"Client wrote to {typeof(NetworkVariable<>).Name} without permission. No more variables can be read. This is critical. => {nameof(NetworkObjectId)}: {NetworkObjectId} - {nameof(NetworkObject.GetNetworkBehaviourOrderIndex)}(): {NetworkObject.GetNetworkBehaviourOrderIndex(this)} - VariableIndex: {i}");
677+
NetworkLog.LogError($"[{NetworkVariableFields[i].GetType().Name}]");
678678
}
679679

680680
return;
681681
}
682682
long readStartPos = stream.Position;
683683

684-
networkVariableList[i].ReadDelta(stream, networkManager.IsServer);
685-
networkManager.NetworkMetrics.TrackNetworkVariableDeltaReceived(
684+
NetworkVariableFields[i].ReadDelta(stream, NetworkManager.IsServer);
685+
NetworkManager.NetworkMetrics.TrackNetworkVariableDeltaReceived(
686686
clientId,
687-
logInstance.NetworkObjectId,
688-
logInstance.name,
689-
networkVariableList[i].Name,
690-
logInstance.__getTypeName(),
687+
NetworkObjectId,
688+
name,
689+
NetworkVariableFields[i].Name,
690+
__getTypeName(),
691691
stream.Length);
692692

693693
(stream as NetworkBuffer).SkipPadBits();
694694

695-
if (networkManager.NetworkConfig.EnsureNetworkVariableLengthSafety)
695+
if (NetworkManager.NetworkConfig.EnsureNetworkVariableLengthSafety)
696696
{
697697
if (stream.Position > (readStartPos + varSize))
698698
{
699699
if (NetworkLog.CurrentLogLevel <= LogLevel.Normal)
700700
{
701-
NetworkLog.LogWarning($"Var delta read too far. {stream.Position - (readStartPos + varSize)} bytes. => {(logInstance != null ? ($"{nameof(NetworkObjectId)}: {logInstance.NetworkObjectId} - {nameof(NetworkObject.GetNetworkBehaviourOrderIndex)}(): {logInstance.NetworkObject.GetNetworkBehaviourOrderIndex(logInstance)} - VariableIndex: {i}") : string.Empty)}");
701+
NetworkLog.LogWarning(
702+
$"Var delta read too far. {stream.Position - (readStartPos + varSize)} bytes. => {nameof(NetworkObjectId)}: {NetworkObjectId} - {nameof(NetworkObject.GetNetworkBehaviourOrderIndex)}(): {NetworkObject.GetNetworkBehaviourOrderIndex(this)} - VariableIndex: {i}");
702703
}
703704

704705
stream.Position = readStartPos + varSize;
@@ -707,7 +708,8 @@ internal static void HandleNetworkVariableDeltas(List<NetworkVariableBase> netwo
707708
{
708709
if (NetworkLog.CurrentLogLevel <= LogLevel.Normal)
709710
{
710-
NetworkLog.LogWarning($"Var delta read too little. {(readStartPos + varSize) - stream.Position} bytes. => {(logInstance != null ? ($"{nameof(NetworkObjectId)}: {logInstance.NetworkObjectId} - {nameof(NetworkObject.GetNetworkBehaviourOrderIndex)}(): {logInstance.NetworkObject.GetNetworkBehaviourOrderIndex(logInstance)} - VariableIndex: {i}") : string.Empty)}");
711+
NetworkLog.LogWarning(
712+
$"Var delta read too little. {(readStartPos + varSize) - stream.Position} bytes. => {nameof(NetworkObjectId)}: {NetworkObjectId} - {nameof(NetworkObject.GetNetworkBehaviourOrderIndex)}(): {NetworkObject.GetNetworkBehaviourOrderIndex(this)} - VariableIndex: {i}");
711713
}
712714

713715
stream.Position = readStartPos + varSize;
@@ -717,20 +719,20 @@ internal static void HandleNetworkVariableDeltas(List<NetworkVariableBase> netwo
717719
}
718720
}
719721

720-
internal static void WriteNetworkVariableData(List<NetworkVariableBase> networkVariableList, Stream stream, ulong clientId, NetworkManager networkManager)
722+
internal void WriteNetworkVariableData(Stream stream, ulong clientId)
721723
{
722-
if (networkVariableList.Count == 0)
724+
if (NetworkVariableFields.Count == 0)
723725
{
724726
return;
725727
}
726728

727729
using (var writer = PooledNetworkWriter.Get(stream))
728730
{
729-
for (int j = 0; j < networkVariableList.Count; j++)
731+
for (int j = 0; j < NetworkVariableFields.Count; j++)
730732
{
731-
bool canClientRead = networkVariableList[j].CanClientRead(clientId);
733+
bool canClientRead = NetworkVariableFields[j].CanClientRead(clientId);
732734

733-
if (networkManager.NetworkConfig.EnsureNetworkVariableLengthSafety)
735+
if (NetworkManager.NetworkConfig.EnsureNetworkVariableLengthSafety)
734736
{
735737
if (!canClientRead)
736738
{
@@ -744,11 +746,11 @@ internal static void WriteNetworkVariableData(List<NetworkVariableBase> networkV
744746

745747
if (canClientRead)
746748
{
747-
if (networkManager.NetworkConfig.EnsureNetworkVariableLengthSafety)
749+
if (NetworkManager.NetworkConfig.EnsureNetworkVariableLengthSafety)
748750
{
749751
using (var varBuffer = PooledNetworkBuffer.Get())
750752
{
751-
networkVariableList[j].WriteField(varBuffer);
753+
NetworkVariableFields[j].WriteField(varBuffer);
752754
varBuffer.PadBuffer();
753755

754756
writer.WriteUInt16Packed((ushort)varBuffer.Length);
@@ -757,28 +759,28 @@ internal static void WriteNetworkVariableData(List<NetworkVariableBase> networkV
757759
}
758760
else
759761
{
760-
networkVariableList[j].WriteField(stream);
762+
NetworkVariableFields[j].WriteField(stream);
761763
writer.WritePadBits();
762764
}
763765
}
764766
}
765767
}
766768
}
767769

768-
internal static void SetNetworkVariableData(List<NetworkVariableBase> networkVariableList, Stream stream, NetworkManager networkManager)
770+
internal void SetNetworkVariableData(Stream stream)
769771
{
770-
if (networkVariableList.Count == 0)
772+
if (NetworkVariableFields.Count == 0)
771773
{
772774
return;
773775
}
774776

775777
using (var reader = PooledNetworkReader.Get(stream))
776778
{
777-
for (int j = 0; j < networkVariableList.Count; j++)
779+
for (int j = 0; j < NetworkVariableFields.Count; j++)
778780
{
779781
ushort varSize = 0;
780782

781-
if (networkManager.NetworkConfig.EnsureNetworkVariableLengthSafety)
783+
if (NetworkManager.NetworkConfig.EnsureNetworkVariableLengthSafety)
782784
{
783785
varSize = reader.ReadUInt16Packed();
784786

@@ -797,10 +799,10 @@ internal static void SetNetworkVariableData(List<NetworkVariableBase> networkVar
797799

798800
long readStartPos = stream.Position;
799801

800-
networkVariableList[j].ReadField(stream);
802+
NetworkVariableFields[j].ReadField(stream);
801803
reader.SkipPadBits();
802804

803-
if (networkManager.NetworkConfig.EnsureNetworkVariableLengthSafety)
805+
if (NetworkManager.NetworkConfig.EnsureNetworkVariableLengthSafety)
804806
{
805807
if (stream is NetworkBuffer networkBuffer)
806808
{

com.unity.netcode.gameobjects/Runtime/Core/NetworkObject.cs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -241,7 +241,7 @@ public void NetworkShow(ulong clientId)
241241

242242
Observers.Add(clientId);
243243

244-
NetworkManager.SpawnManager.SendSpawnCallForObject(clientId, OwnerClientId, this);
244+
NetworkManager.SpawnManager.SendSpawnCallForObject(clientId, this);
245245
}
246246

247247
/// <summary>
@@ -499,7 +499,7 @@ private void SpawnInternal(bool destroyWithScene, ulong? ownerClientId, bool pla
499499
{
500500
if (Observers.Contains(NetworkManager.ConnectedClientsList[i].ClientId))
501501
{
502-
NetworkManager.SpawnManager.SendSpawnCallForObject(NetworkManager.ConnectedClientsList[i].ClientId, ownerId, this);
502+
NetworkManager.SpawnManager.SendSpawnCallForObject(NetworkManager.ConnectedClientsList[i].ClientId, this);
503503
}
504504
}
505505
}
@@ -872,17 +872,19 @@ internal void WriteNetworkVariableData(Stream stream, ulong clientId)
872872
{
873873
for (int i = 0; i < ChildNetworkBehaviours.Count; i++)
874874
{
875-
ChildNetworkBehaviours[i].InitializeVariables();
876-
NetworkBehaviour.WriteNetworkVariableData(ChildNetworkBehaviours[i].NetworkVariableFields, stream, clientId, NetworkManager);
875+
var behavior = ChildNetworkBehaviours[i];
876+
behavior.InitializeVariables();
877+
behavior.WriteNetworkVariableData(stream, clientId);
877878
}
878879
}
879880

880881
internal void SetNetworkVariableData(Stream stream)
881882
{
882883
for (int i = 0; i < ChildNetworkBehaviours.Count; i++)
883884
{
884-
ChildNetworkBehaviours[i].InitializeVariables();
885-
NetworkBehaviour.SetNetworkVariableData(ChildNetworkBehaviours[i].NetworkVariableFields, stream, NetworkManager);
885+
var behaviour = ChildNetworkBehaviours[i];
886+
behaviour.InitializeVariables();
887+
behaviour.SetNetworkVariableData(stream);
886888
}
887889
}
888890

com.unity.netcode.gameobjects/Runtime/Messaging/InternalMessageHandler.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -211,9 +211,9 @@ public void HandleNetworkVariableDelta(ulong clientId, Stream stream)
211211

212212
if (NetworkManager.SpawnManager.SpawnedObjects.TryGetValue(networkObjectId, out NetworkObject networkObject))
213213
{
214-
NetworkBehaviour instance = networkObject.GetNetworkBehaviourAtOrderIndex(networkBehaviourIndex);
214+
NetworkBehaviour behaviour = networkObject.GetNetworkBehaviourAtOrderIndex(networkBehaviourIndex);
215215

216-
if (instance == null)
216+
if (behaviour == null)
217217
{
218218
if (NetworkLog.CurrentLogLevel <= LogLevel.Normal)
219219
{
@@ -222,7 +222,7 @@ public void HandleNetworkVariableDelta(ulong clientId, Stream stream)
222222
}
223223
else
224224
{
225-
NetworkBehaviour.HandleNetworkVariableDeltas(instance.NetworkVariableFields, stream, clientId, instance, NetworkManager);
225+
behaviour.HandleNetworkVariableDeltas(stream, clientId);
226226
}
227227
}
228228
else if (NetworkManager.IsServer)

com.unity.netcode.gameobjects/Runtime/Metrics/NetworkObjectProvider.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
#if MULTIPLAYER_TOOLS
1+
#if MULTIPLAYER_TOOLS
22
using Unity.Multiplayer.Tools;
33
using UnityEngine;
44

com.unity.netcode.gameobjects/Runtime/NetworkVariable/ClientNetworkVariable.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,16 @@ public class ClientNetworkVariable<T> : NetworkVariable<T> where T : unmanaged
1515
{
1616
public ClientNetworkVariable() { }
1717

18-
public ClientNetworkVariable(NetworkVariableSettings settings) : base(settings) { }
18+
public ClientNetworkVariable(NetworkVariableReadPermission readPerm) : base(readPerm) { }
1919

2020
public override bool CanClientWrite(ulong clientId)
2121
{
22-
return NetworkBehaviour.OwnerClientId == clientId;
22+
return m_NetworkBehaviour.OwnerClientId == clientId;
2323
}
2424

2525
public override bool ShouldWrite(ulong clientId, bool isServer)
2626
{
27-
return m_IsDirty && !isServer && NetworkBehaviour.IsOwner;
27+
return m_IsDirty && !isServer && m_NetworkBehaviour.IsOwner;
2828
}
2929

3030
/// <summary>
@@ -40,7 +40,7 @@ public override T Value
4040

4141
// Also, note this is not really very water-tight, if you are running as a host
4242
// we cannot tell if a ClientNetworkVariable write is happening inside server-ish code
43-
if (NetworkBehaviour.NetworkManager.IsServer)
43+
if (m_NetworkBehaviour.NetworkManager.IsServer)
4444
{
4545
throw new InvalidOperationException("Server not allowed to write to ClientNetworkVariables");
4646
}

0 commit comments

Comments
 (0)