Skip to content

Commit

Permalink
fix: not sending to owner if they are host player
Browse files Browse the repository at this point in the history
  • Loading branch information
James-Frowen committed Apr 1, 2023
1 parent 34099ef commit 1c5eed5
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 19 deletions.
8 changes: 3 additions & 5 deletions Assets/Mirage/Runtime/SyncVarReceiver.cs
Original file line number Diff line number Diff line change
Expand Up @@ -29,11 +29,9 @@ public SyncVarReceiver(NetworkClient client, IObjectLocator objectLocator)

private void AddHandlers(NetworkClient client)
{
if (client.IsLocalClient)
{
client.MessageHandler.RegisterHandler<UpdateVarsMessage>(_ => { });
}
else
// dont add if host player
// server should never sent to host
if (!client.IsLocalClient)
{
client.MessageHandler.RegisterHandler<UpdateVarsMessage>(OnUpdateVarsMessage);
}
Expand Down
40 changes: 26 additions & 14 deletions Assets/Mirage/Runtime/SyncVarSender.cs
Original file line number Diff line number Diff line change
Expand Up @@ -89,20 +89,7 @@ internal static void SendUpdateVarsMessage(NetworkIdentity identity)
// below too)
if (ownerWritten > 0)
{
INetworkPlayer player;

if (identity.IsServer)
player = identity.Owner;
else if (identity.HasAuthority)
player = identity.Client.Player;
else
throw new InvalidOperationException("Should be server or have auth if sending to OwnerWriter");

if (player != null && player.SceneIsReady)
{
varsMessage.payload = ownerWriter.ToArraySegment();
player.Send(varsMessage);
}
SendToRemoteOwner(identity, ownerWriter, varsMessage);
}

// send observersWriter to everyone but owner
Expand All @@ -125,5 +112,30 @@ internal static void SendUpdateVarsMessage(NetworkIdentity identity)
}
}
}

private static void SendToRemoteOwner(NetworkIdentity identity, PooledNetworkWriter ownerWriter, UpdateVarsMessage varsMessage)
{
INetworkPlayer player;

if (identity.IsServer)
{
player = identity.Owner;

// if target player is host, dont send
if (player == identity.Server.LocalPlayer)
return;
}
else if (identity.HasAuthority) // client only and auth
player = identity.Client.Player;
else
throw new InvalidOperationException("Should be server or have auth if sending to OwnerWriter");

// check player is ready
if (player != null && player.SceneIsReady)
{
varsMessage.payload = ownerWriter.ToArraySegment();
player.Send(varsMessage);
}
}
}
}

0 comments on commit 1c5eed5

Please sign in to comment.