using FishNet.Connection;
using UnityEngine;
namespace FishNet.Object
{
public sealed partial class NetworkObject : MonoBehaviour
{
///
/// Called after all data is synchronized with this NetworkObject.
///
private void InitializeCallbacks(bool asServer)
{
/* Note: When invoking OnOwnership here previous owner will
* always be an empty connection, since the object is just
* now initializing. */
if (!asServer)
ClientInitialized = true;
//Set that client or server is active before callbacks.
SetActiveStatus(true, asServer);
//Invoke OnStartNetwork.
for (int i = 0; i < NetworkBehaviours.Length; i++)
NetworkBehaviours[i].InvokeOnNetwork(true);
//As server.
if (asServer)
{
for (int i = 0; i < NetworkBehaviours.Length; i++)
NetworkBehaviours[i].OnStartServer();
for (int i = 0; i < NetworkBehaviours.Length; i++)
NetworkBehaviours[i].InvokeSyncTypeCallbacks(true);
if (Owner.IsValid)
{
for (int i = 0; i < NetworkBehaviours.Length; i++)
NetworkBehaviours[i].OnOwnershipServer(FishNet.Managing.NetworkManager.EmptyConnection);
}
}
//As client.
else
{
for (int i = 0; i < NetworkBehaviours.Length; i++)
NetworkBehaviours[i].OnStartClient();
for (int i = 0; i < NetworkBehaviours.Length; i++)
NetworkBehaviours[i].InvokeSyncTypeCallbacks(false);
if (IsOwner)
{
for (int i = 0; i < NetworkBehaviours.Length; i++)
NetworkBehaviours[i].OnOwnershipClient(FishNet.Managing.NetworkManager.EmptyConnection);
}
}
}
///
/// Invokes events to be called after OnServerStart.
/// This is made one method to save instruction calls.
///
///
internal void InvokePostOnServerStart(NetworkConnection conn)
{
for (int i = 0; i < NetworkBehaviours.Length; i++)
NetworkBehaviours[i].SendBufferedRpcs(conn);
for (int i = 0; i < NetworkBehaviours.Length; i++)
NetworkBehaviours[i].OnSpawnServer(conn);
}
///
/// Called on the server before it sends a despawn message to a client.
///
/// Connection spawn was sent to.
internal void InvokeOnServerDespawn(NetworkConnection conn)
{
for (int i = 0; i < NetworkBehaviours.Length; i++)
NetworkBehaviours[i].OnDespawnServer(conn);
}
///
/// Invokes OnStop callbacks.
///
///
private void InvokeStopCallbacks(bool asServer)
{
if (asServer)
{
for (int i = 0; i < NetworkBehaviours.Length; i++)
NetworkBehaviours[i].OnStopServer();
}
else
{
for (int i = 0; i < NetworkBehaviours.Length; i++)
NetworkBehaviours[i].OnStopClient();
}
/* Invoke OnStopNetwork if server is calling
* or if client and not as server. */
if (asServer || (!asServer && !IsServer))
{
for (int i = 0; i < NetworkBehaviours.Length; i++)
NetworkBehaviours[i].InvokeOnNetwork(false);
}
if (asServer)
IsServer = false;
else
IsClient = false;
}
///
/// Invokes OnOwnership callbacks.
///
///
private void InvokeOwnership(NetworkConnection prevOwner, bool asServer)
{
if (asServer)
{
for (int i = 0; i < NetworkBehaviours.Length; i++)
NetworkBehaviours[i].OnOwnershipServer(prevOwner);
}
else
{
for (int i = 0; i < NetworkBehaviours.Length; i++)
NetworkBehaviours[i].OnOwnershipClient(prevOwner);
}
}
}
}