mirror of
https://github.com/MirrorNetworking/Mirror.git
synced 2024-11-18 11:00:32 +00:00
NetworkIdentity.HandleRemoteCall function that is reused by HandleSyncEvent/Command/Rpc now
This commit is contained in:
parent
8947e9d974
commit
98dc229e98
@ -555,27 +555,26 @@ internal void HandleClientAuthority(bool authority)
|
|||||||
ForceAuthority(authority);
|
ForceAuthority(authority);
|
||||||
}
|
}
|
||||||
|
|
||||||
// happens on client
|
// helper function to handle SyncEvent/Command/Rpc
|
||||||
internal void HandleSyncEvent(int componentIndex, int cmdHash, NetworkReader reader)
|
internal void HandleRemoteCall(int componentIndex, int functionHash, UNetInvokeType invokeType, NetworkReader reader)
|
||||||
{
|
{
|
||||||
// this doesn't use NetworkBehaviour.InvokeSyncEvent function (anymore). this method of calling is faster.
|
// this doesn't use NetworkBehaviour.InvokeSyncEvent function (anymore). this method of calling is faster.
|
||||||
// The hash is only looked up once, insted of twice(!) per NetworkBehaviour on the object.
|
// The hash is only looked up once, insted of twice(!) per NetworkBehaviour on the object.
|
||||||
|
|
||||||
if (gameObject == null)
|
if (gameObject == null)
|
||||||
{
|
{
|
||||||
string errorCmdName = NetworkBehaviour.GetCmdHashHandlerName(cmdHash);
|
string functionName = NetworkBehaviour.GetCmdHashHandlerName(functionHash);
|
||||||
Debug.LogWarning("SyncEvent [" + errorCmdName + "] received for deleted object [netId=" + netId + "]");
|
Debug.LogWarning(invokeType + " [" + functionName + "] received for deleted object [netId=" + netId + "]");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// find the matching SyncEvent function and networkBehaviour class
|
// find the matching invoke function and NetworkBehaviour class
|
||||||
NetworkBehaviour.CmdDelegate invokeFunction;
|
NetworkBehaviour.CmdDelegate invokeFunction;
|
||||||
bool invokeFound = NetworkBehaviour.GetInvokerFunctionForHash(cmdHash, UNetInvokeType.SyncEvent, out invokeFunction);
|
if (!NetworkBehaviour.GetInvokerFunctionForHash(functionHash, invokeType, out invokeFunction))
|
||||||
if (!invokeFound)
|
|
||||||
{
|
{
|
||||||
// We don't get a valid lookup of the command name when it doesn't exist...
|
// We don't get a valid lookup of the command name when it doesn't exist...
|
||||||
string errorCmdName = NetworkBehaviour.GetCmdHashHandlerName(cmdHash);
|
string functionName = NetworkBehaviour.GetCmdHashHandlerName(functionHash);
|
||||||
Debug.LogError("Found no receiver for incoming [" + errorCmdName + "] on " + gameObject + ", the server and client should have the same NetworkBehaviour instances [netId=" + netId + "].");
|
Debug.LogError("Found no receiver for incoming [" + functionName + "] on " + gameObject + ", the server and client should have the same NetworkBehaviour instances [netId=" + netId + "].");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -586,78 +585,25 @@ internal void HandleSyncEvent(int componentIndex, int cmdHash, NetworkReader rea
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
NetworkBehaviour invokeComponent = m_NetworkBehaviours[componentIndex];
|
NetworkBehaviour invokeComponent = m_NetworkBehaviours[componentIndex];
|
||||||
|
|
||||||
invokeFunction(invokeComponent, reader);
|
invokeFunction(invokeComponent, reader);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// happens on client
|
||||||
|
internal void HandleSyncEvent(int componentIndex, int eventHash, NetworkReader reader)
|
||||||
|
{
|
||||||
|
HandleRemoteCall(componentIndex, eventHash, UNetInvokeType.SyncEvent, reader);
|
||||||
|
}
|
||||||
|
|
||||||
// happens on server
|
// happens on server
|
||||||
internal void HandleCommand(int componentIndex, int cmdHash, NetworkReader reader)
|
internal void HandleCommand(int componentIndex, int cmdHash, NetworkReader reader)
|
||||||
{
|
{
|
||||||
// this doesn't use NetworkBehaviour.InvokeCommand function (anymore). this method of calling is faster.
|
HandleRemoteCall(componentIndex, cmdHash, UNetInvokeType.Command, reader);
|
||||||
// The hash is only looked up once, insted of twice(!) per NetworkBehaviour on the object.
|
|
||||||
|
|
||||||
if (gameObject == null)
|
|
||||||
{
|
|
||||||
string errorCmdName = NetworkBehaviour.GetCmdHashHandlerName(cmdHash);
|
|
||||||
Debug.LogWarning("Command [" + errorCmdName + "] received for deleted object [netId=" + netId + "]");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// find the matching Command function and networkBehaviour class
|
|
||||||
NetworkBehaviour.CmdDelegate invokeFunction;
|
|
||||||
bool invokeFound = NetworkBehaviour.GetInvokerFunctionForHash(cmdHash, UNetInvokeType.Command, out invokeFunction);
|
|
||||||
if (!invokeFound)
|
|
||||||
{
|
|
||||||
// We don't get a valid lookup of the command name when it doesn't exist...
|
|
||||||
string errorCmdName = NetworkBehaviour.GetCmdHashHandlerName(cmdHash);
|
|
||||||
Debug.LogError("Found no receiver for incoming [" + errorCmdName + "] on " + gameObject + ", the server and client should have the same NetworkBehaviour instances [netId=" + netId + "].");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// find the right component to invoke the function on
|
|
||||||
if (componentIndex >= m_NetworkBehaviours.Length)
|
|
||||||
{
|
|
||||||
Debug.LogWarning("Component [" + componentIndex + "] not found for [netId=" + netId + "]");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
NetworkBehaviour invokeComponent = m_NetworkBehaviours[componentIndex];
|
|
||||||
|
|
||||||
invokeFunction(invokeComponent, reader);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// happens on client
|
// happens on client
|
||||||
internal void HandleRPC(int componentIndex, int cmdHash, NetworkReader reader)
|
internal void HandleRPC(int componentIndex, int rpcHash, NetworkReader reader)
|
||||||
{
|
{
|
||||||
// this doesn't use NetworkBehaviour.InvokeClientRpc function (anymore). this method of calling is faster.
|
HandleRemoteCall(componentIndex, rpcHash, UNetInvokeType.ClientRpc, reader);
|
||||||
// The hash is only looked up once, insted of twice(!) per NetworkBehaviour on the object.
|
|
||||||
|
|
||||||
if (gameObject == null)
|
|
||||||
{
|
|
||||||
string errorCmdName = NetworkBehaviour.GetCmdHashHandlerName(cmdHash);
|
|
||||||
Debug.LogWarning("ClientRpc [" + errorCmdName + "] received for deleted object [netId=" + netId + "]");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// find the matching ClientRpc function and networkBehaviour class
|
|
||||||
NetworkBehaviour.CmdDelegate invokeFunction;
|
|
||||||
bool invokeFound = NetworkBehaviour.GetInvokerFunctionForHash(cmdHash, UNetInvokeType.ClientRpc, out invokeFunction);
|
|
||||||
if (!invokeFound)
|
|
||||||
{
|
|
||||||
// We don't get a valid lookup of the command name when it doesn't exist...
|
|
||||||
string errorCmdName = NetworkBehaviour.GetCmdHashHandlerName(cmdHash);
|
|
||||||
Debug.LogError("Found no receiver for incoming [" + errorCmdName + "] on " + gameObject + ", the server and client should have the same NetworkBehaviour instances [netId=" + netId + "].");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// find the right component to invoke the function on
|
|
||||||
if (componentIndex >= m_NetworkBehaviours.Length)
|
|
||||||
{
|
|
||||||
Debug.LogWarning("Component [" + componentIndex + "] not found for [netId=" + netId + "]");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
NetworkBehaviour invokeComponent = m_NetworkBehaviours[componentIndex];
|
|
||||||
|
|
||||||
invokeFunction(invokeComponent, reader);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// invoked by unity runtime immediately after the regular "Update()" function.
|
// invoked by unity runtime immediately after the regular "Update()" function.
|
||||||
|
Loading…
Reference in New Issue
Block a user