Skip to content

Commit 2571b8c

Browse files
DanZolnik0xFA11
andauthored
feat!: add client id to spawn handler delegate (#685)
* feat!: add client id to spawn handler * fix: rename clientId to ownerClientId plus added parameter doc * fix: renamed owner to ownerClientId * fix: renamed clientId to ownerClientId * fix: renamed ownerId to ownerClientId * fix: renamed clientId to ownerClientId Co-authored-by: M. Fatih MAR <[email protected]>
1 parent ffbf84e commit 2571b8c

File tree

4 files changed

+46
-45
lines changed

4 files changed

+46
-45
lines changed

com.unity.multiplayer.mlapi/Runtime/Core/NetworkManager.cs

Lines changed: 32 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1424,18 +1424,18 @@ private void SyncTime()
14241424

14251425
private readonly List<NetworkObject> m_ObservedObjects = new List<NetworkObject>();
14261426

1427-
internal void HandleApproval(ulong clientId, bool createPlayerObject, ulong? playerPrefabHash, bool approved, Vector3? position, Quaternion? rotation)
1427+
internal void HandleApproval(ulong ownerClientId, bool createPlayerObject, ulong? playerPrefabHash, bool approved, Vector3? position, Quaternion? rotation)
14281428
{
14291429
if (approved)
14301430
{
14311431
// Inform new client it got approved
1432-
if (PendingClients.ContainsKey(clientId))
1432+
if (PendingClients.ContainsKey(ownerClientId))
14331433
{
1434-
PendingClients.Remove(clientId);
1434+
PendingClients.Remove(ownerClientId);
14351435
}
14361436

1437-
var client = new NetworkClient { ClientId = clientId, };
1438-
ConnectedClients.Add(clientId, client);
1437+
var client = new NetworkClient { ClientId = ownerClientId, };
1438+
ConnectedClients.Add(ownerClientId, client);
14391439
ConnectedClientsList.Add(client);
14401440

14411441
PerformanceDataManager.Increment(ProfilerConstants.Connections);
@@ -1446,30 +1446,30 @@ internal void HandleApproval(ulong clientId, bool createPlayerObject, ulong? pla
14461446

14471447
if (createPlayerObject)
14481448
{
1449-
var networkObject = NetworkSpawnManager.CreateLocalNetworkObject(false, 0, playerPrefabHash ?? NetworkConfig.PlayerPrefabHash.Value, null, position, rotation);
1450-
NetworkSpawnManager.SpawnNetworkObjectLocally(networkObject, NetworkSpawnManager.GetNetworkObjectId(), false, true, clientId, null, false, 0, false, false);
1449+
var networkObject = NetworkSpawnManager.CreateLocalNetworkObject(false, 0, playerPrefabHash ?? NetworkConfig.PlayerPrefabHash.Value, ownerClientId, null, position, rotation);
1450+
NetworkSpawnManager.SpawnNetworkObjectLocally(networkObject, NetworkSpawnManager.GetNetworkObjectId(), false, true, ownerClientId, null, false, 0, false, false);
14511451

1452-
ConnectedClients[clientId].PlayerObject = networkObject;
1452+
ConnectedClients[ownerClientId].PlayerObject = networkObject;
14531453
}
14541454

14551455
m_ObservedObjects.Clear();
14561456

14571457
foreach (var sobj in NetworkSpawnManager.SpawnedObjectsList)
14581458
{
1459-
if (clientId == ServerClientId || sobj.CheckObjectVisibility == null || sobj.CheckObjectVisibility(clientId))
1459+
if (ownerClientId == ServerClientId || sobj.CheckObjectVisibility == null || sobj.CheckObjectVisibility(ownerClientId))
14601460
{
14611461
m_ObservedObjects.Add(sobj);
1462-
sobj.Observers.Add(clientId);
1462+
sobj.Observers.Add(ownerClientId);
14631463
}
14641464
}
14651465

1466-
if (clientId != ServerClientId)
1466+
if (ownerClientId != ServerClientId)
14671467
{
14681468
// Don't send any data over the wire if the host "connected"
14691469
using (var buffer = PooledNetworkBuffer.Get())
14701470
using (var writer = PooledNetworkWriter.Get(buffer))
14711471
{
1472-
writer.WriteUInt64Packed(clientId);
1472+
writer.WriteUInt64Packed(ownerClientId);
14731473

14741474
if (NetworkConfig.EnableSceneManagement)
14751475
{
@@ -1523,7 +1523,7 @@ internal void HandleApproval(ulong clientId, bool createPlayerObject, ulong? pla
15231523
}
15241524
}
15251525

1526-
if (observedObject.IncludeTransformWhenSpawning == null || observedObject.IncludeTransformWhenSpawning(clientId))
1526+
if (observedObject.IncludeTransformWhenSpawning == null || observedObject.IncludeTransformWhenSpawning(ownerClientId))
15271527
{
15281528
writer.WriteBool(true);
15291529
writer.WriteSinglePacked(observedObject.transform.position.x);
@@ -1541,15 +1541,15 @@ internal void HandleApproval(ulong clientId, bool createPlayerObject, ulong? pla
15411541

15421542
if (NetworkConfig.EnableNetworkVariable)
15431543
{
1544-
observedObject.WriteNetworkVariableData(buffer, clientId);
1544+
observedObject.WriteNetworkVariableData(buffer, ownerClientId);
15451545
}
15461546
}
15471547

1548-
InternalMessageSender.Send(clientId, NetworkConstants.CONNECTION_APPROVED, NetworkChannel.Internal, buffer);
1548+
InternalMessageSender.Send(ownerClientId, NetworkConstants.CONNECTION_APPROVED, NetworkChannel.Internal, buffer);
15491549
}
15501550
}
15511551

1552-
OnClientConnectedCallback?.Invoke(clientId);
1552+
OnClientConnectedCallback?.Invoke(ownerClientId);
15531553

15541554
if (!createPlayerObject || (playerPrefabHash == null && NetworkConfig.PlayerPrefabHash == null))
15551555
{
@@ -1559,9 +1559,9 @@ internal void HandleApproval(ulong clientId, bool createPlayerObject, ulong? pla
15591559
// Inform old clients of the new player
15601560
foreach (KeyValuePair<ulong, NetworkClient> clientPair in ConnectedClients)
15611561
{
1562-
if (clientPair.Key == clientId ||
1563-
ConnectedClients[clientId].PlayerObject == null ||
1564-
!ConnectedClients[clientId].PlayerObject.Observers.Contains(clientPair.Key))
1562+
if (clientPair.Key == ownerClientId ||
1563+
ConnectedClients[ownerClientId].PlayerObject == null ||
1564+
!ConnectedClients[ownerClientId].PlayerObject.Observers.Contains(clientPair.Key))
15651565
{
15661566
continue; //The new client.
15671567
}
@@ -1570,8 +1570,8 @@ internal void HandleApproval(ulong clientId, bool createPlayerObject, ulong? pla
15701570
using (var writer = PooledNetworkWriter.Get(buffer))
15711571
{
15721572
writer.WriteBool(true);
1573-
writer.WriteUInt64Packed(ConnectedClients[clientId].PlayerObject.NetworkObjectId);
1574-
writer.WriteUInt64Packed(clientId);
1573+
writer.WriteUInt64Packed(ConnectedClients[ownerClientId].PlayerObject.NetworkObjectId);
1574+
writer.WriteUInt64Packed(ownerClientId);
15751575

15761576
//Does not have a parent
15771577
writer.WriteBool(false);
@@ -1587,16 +1587,16 @@ internal void HandleApproval(ulong clientId, bool createPlayerObject, ulong? pla
15871587
writer.WriteUInt64Packed(playerPrefabHash ?? NetworkConfig.PlayerPrefabHash.Value);
15881588
}
15891589

1590-
if (ConnectedClients[clientId].PlayerObject.IncludeTransformWhenSpawning == null || ConnectedClients[clientId].PlayerObject.IncludeTransformWhenSpawning(clientId))
1590+
if (ConnectedClients[ownerClientId].PlayerObject.IncludeTransformWhenSpawning == null || ConnectedClients[ownerClientId].PlayerObject.IncludeTransformWhenSpawning(ownerClientId))
15911591
{
15921592
writer.WriteBool(true);
1593-
writer.WriteSinglePacked(ConnectedClients[clientId].PlayerObject.transform.position.x);
1594-
writer.WriteSinglePacked(ConnectedClients[clientId].PlayerObject.transform.position.y);
1595-
writer.WriteSinglePacked(ConnectedClients[clientId].PlayerObject.transform.position.z);
1593+
writer.WriteSinglePacked(ConnectedClients[ownerClientId].PlayerObject.transform.position.x);
1594+
writer.WriteSinglePacked(ConnectedClients[ownerClientId].PlayerObject.transform.position.y);
1595+
writer.WriteSinglePacked(ConnectedClients[ownerClientId].PlayerObject.transform.position.z);
15961596

1597-
writer.WriteSinglePacked(ConnectedClients[clientId].PlayerObject.transform.rotation.eulerAngles.x);
1598-
writer.WriteSinglePacked(ConnectedClients[clientId].PlayerObject.transform.rotation.eulerAngles.y);
1599-
writer.WriteSinglePacked(ConnectedClients[clientId].PlayerObject.transform.rotation.eulerAngles.z);
1597+
writer.WriteSinglePacked(ConnectedClients[ownerClientId].PlayerObject.transform.rotation.eulerAngles.x);
1598+
writer.WriteSinglePacked(ConnectedClients[ownerClientId].PlayerObject.transform.rotation.eulerAngles.y);
1599+
writer.WriteSinglePacked(ConnectedClients[ownerClientId].PlayerObject.transform.rotation.eulerAngles.z);
16001600
}
16011601
else
16021602
{
@@ -1607,7 +1607,7 @@ internal void HandleApproval(ulong clientId, bool createPlayerObject, ulong? pla
16071607

16081608
if (NetworkConfig.EnableNetworkVariable)
16091609
{
1610-
ConnectedClients[clientId].PlayerObject.WriteNetworkVariableData(buffer, clientPair.Key);
1610+
ConnectedClients[ownerClientId].PlayerObject.WriteNetworkVariableData(buffer, clientPair.Key);
16111611
}
16121612

16131613
InternalMessageSender.Send(clientPair.Key, NetworkConstants.ADD_OBJECT, NetworkChannel.Internal, buffer);
@@ -1616,12 +1616,12 @@ internal void HandleApproval(ulong clientId, bool createPlayerObject, ulong? pla
16161616
}
16171617
else
16181618
{
1619-
if (PendingClients.ContainsKey(clientId))
1619+
if (PendingClients.ContainsKey(ownerClientId))
16201620
{
1621-
PendingClients.Remove(clientId);
1621+
PendingClients.Remove(ownerClientId);
16221622
}
16231623

1624-
NetworkConfig.NetworkTransport.DisconnectRemoteClient(clientId);
1624+
NetworkConfig.NetworkTransport.DisconnectRemoteClient(ownerClientId);
16251625
}
16261626
}
16271627

com.unity.multiplayer.mlapi/Runtime/Messaging/InternalMessageHandler.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ void DelayedSpawnAction(Stream continuationStream)
166166
rot = Quaternion.Euler(continuationReader.ReadSinglePacked(), continuationReader.ReadSinglePacked(), continuationReader.ReadSinglePacked());
167167
}
168168

169-
var networkObject = NetworkSpawnManager.CreateLocalNetworkObject(softSync, instanceId, prefabHash, parentNetworkId, pos, rot);
169+
var networkObject = NetworkSpawnManager.CreateLocalNetworkObject(softSync, instanceId, prefabHash, ownerId, parentNetworkId, pos, rot);
170170
NetworkSpawnManager.SpawnNetworkObjectLocally(networkObject, networkId, softSync, isPlayerObject, ownerId, continuationStream, false, 0, true, false);
171171

172172
Queue<BufferManager.BufferedMessage> bufferQueue = BufferManager.ConsumeBuffersForNetworkId(networkId);
@@ -227,7 +227,7 @@ internal static void HandleAddObject(ulong clientId, Stream stream)
227227
{
228228
bool isPlayerObject = reader.ReadBool();
229229
ulong networkId = reader.ReadUInt64Packed();
230-
ulong ownerId = reader.ReadUInt64Packed();
230+
ulong ownerClientId = reader.ReadUInt64Packed();
231231
bool hasParent = reader.ReadBool();
232232
ulong? parentNetworkId = null;
233233

@@ -273,8 +273,8 @@ internal static void HandleAddObject(ulong clientId, Stream stream)
273273
bool hasPayload = reader.ReadBool();
274274
int payLoadLength = hasPayload ? reader.ReadInt32Packed() : 0;
275275

276-
var networkObject = NetworkSpawnManager.CreateLocalNetworkObject(softSync, instanceId, prefabHash, parentNetworkId, pos, rot);
277-
NetworkSpawnManager.SpawnNetworkObjectLocally(networkObject, networkId, softSync, isPlayerObject, ownerId, stream, hasPayload, payLoadLength, true, false);
276+
var networkObject = NetworkSpawnManager.CreateLocalNetworkObject(softSync, instanceId, prefabHash, ownerClientId, parentNetworkId, pos, rot);
277+
NetworkSpawnManager.SpawnNetworkObjectLocally(networkObject, networkId, softSync, isPlayerObject, ownerClientId, stream, hasPayload, payLoadLength, true, false);
278278

279279
Queue<BufferManager.BufferedMessage> bufferQueue = BufferManager.ConsumeBuffersForNetworkId(networkId);
280280

com.unity.multiplayer.mlapi/Runtime/SceneManagement/NetworkSceneManager.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -347,7 +347,7 @@ private static void OnSceneUnloadClient(Guid switchSceneGuid, Stream objectStrea
347347
{
348348
bool isPlayerObject = reader.ReadBool();
349349
ulong networkId = reader.ReadUInt64Packed();
350-
ulong owner = reader.ReadUInt64Packed();
350+
ulong ownerClientId = reader.ReadUInt64Packed();
351351
bool hasParent = reader.ReadBool();
352352
ulong? parentNetworkId = null;
353353

@@ -366,8 +366,8 @@ private static void OnSceneUnloadClient(Guid switchSceneGuid, Stream objectStrea
366366
rotation = Quaternion.Euler(reader.ReadSinglePacked(), reader.ReadSinglePacked(), reader.ReadSinglePacked());
367367
}
368368

369-
var networkObject = NetworkSpawnManager.CreateLocalNetworkObject(false, 0, prefabHash, parentNetworkId, position, rotation);
370-
NetworkSpawnManager.SpawnNetworkObjectLocally(networkObject, networkId, true, isPlayerObject, owner, objectStream, false, 0, true, false);
369+
var networkObject = NetworkSpawnManager.CreateLocalNetworkObject(false, 0, prefabHash, ownerClientId, parentNetworkId, position, rotation);
370+
NetworkSpawnManager.SpawnNetworkObjectLocally(networkObject, networkId, true, isPlayerObject, ownerClientId, objectStream, false, 0, true, false);
371371

372372
var bufferQueue = BufferManager.ConsumeBuffersForNetworkId(networkId);
373373

@@ -397,7 +397,7 @@ private static void OnSceneUnloadClient(Guid switchSceneGuid, Stream objectStrea
397397
{
398398
bool isPlayerObject = reader.ReadBool();
399399
ulong networkId = reader.ReadUInt64Packed();
400-
ulong owner = reader.ReadUInt64Packed();
400+
ulong ownerClientId = reader.ReadUInt64Packed();
401401
bool hasParent = reader.ReadBool();
402402
ulong? parentNetworkId = null;
403403

@@ -408,8 +408,8 @@ private static void OnSceneUnloadClient(Guid switchSceneGuid, Stream objectStrea
408408

409409
ulong instanceId = reader.ReadUInt64Packed();
410410

411-
var networkObject = NetworkSpawnManager.CreateLocalNetworkObject(true, instanceId, 0, parentNetworkId, null, null);
412-
NetworkSpawnManager.SpawnNetworkObjectLocally(networkObject, networkId, true, isPlayerObject, owner, objectStream, false, 0, true, false);
411+
var networkObject = NetworkSpawnManager.CreateLocalNetworkObject(true, instanceId, 0, ownerClientId, parentNetworkId, null, null);
412+
NetworkSpawnManager.SpawnNetworkObjectLocally(networkObject, networkId, true, isPlayerObject, ownerClientId, objectStream, false, 0, true, false);
413413

414414
var bufferQueue = BufferManager.ConsumeBuffersForNetworkId(networkId);
415415

com.unity.multiplayer.mlapi/Runtime/Spawning/NetworkSpawnManager.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,10 @@ public static class NetworkSpawnManager
3535
/// <summary>
3636
/// The delegate used when spawning a NetworkObject
3737
/// </summary>
38+
/// <param name="ownerClientId">The owner client id of the object that is being spawned</param>
3839
/// <param name="position">The position to spawn the object at</param>
3940
/// <param name="rotation">The rotation to spawn the object with</param>
40-
public delegate NetworkObject SpawnHandlerDelegate(Vector3 position, Quaternion rotation);
41+
public delegate NetworkObject SpawnHandlerDelegate(ulong ownerClientId, Vector3 position, Quaternion rotation);
4142

4243
/// <summary>
4344
/// The delegate used when destroying NetworkObjects
@@ -250,7 +251,7 @@ internal static void ChangeOwnership(NetworkObject networkObject, ulong clientId
250251
}
251252

252253
// Only ran on Client
253-
internal static NetworkObject CreateLocalNetworkObject(bool softCreate, ulong instanceId, ulong prefabHash, ulong? parentNetworkId, Vector3? position, Quaternion? rotation)
254+
internal static NetworkObject CreateLocalNetworkObject(bool softCreate, ulong instanceId, ulong prefabHash, ulong ownerClientId, ulong? parentNetworkId, Vector3? position, Quaternion? rotation)
254255
{
255256
NetworkObject parentNetworkObject = null;
256257

@@ -271,7 +272,7 @@ internal static NetworkObject CreateLocalNetworkObject(bool softCreate, ulong in
271272
// Create the object
272273
if (CustomSpawnHandlers.ContainsKey(prefabHash))
273274
{
274-
var networkObject = CustomSpawnHandlers[prefabHash](position.GetValueOrDefault(Vector3.zero), rotation.GetValueOrDefault(Quaternion.identity));
275+
var networkObject = CustomSpawnHandlers[prefabHash](ownerClientId, position.GetValueOrDefault(Vector3.zero), rotation.GetValueOrDefault(Quaternion.identity));
275276

276277
if (parentNetworkObject != null)
277278
{

0 commit comments

Comments
 (0)