From 3154fc5094338a4a4fbffa907a38e2681997c747 Mon Sep 17 00:00:00 2001 From: Anton Franzluebbers Date: Tue, 21 Jun 2022 20:19:26 -0400 Subject: [PATCH] method caching for rpc, small fixes --- TestVelGameServer/Assets/RPCTest.cs | 6 ----- .../VelNetUnity/Runtime/NetworkComponent.cs | 23 ++++++++++++++----- .../RiderScriptEditorPersistedState.asset | 2 +- 3 files changed, 18 insertions(+), 13 deletions(-) diff --git a/TestVelGameServer/Assets/RPCTest.cs b/TestVelGameServer/Assets/RPCTest.cs index d462359..8682283 100644 --- a/TestVelGameServer/Assets/RPCTest.cs +++ b/TestVelGameServer/Assets/RPCTest.cs @@ -6,12 +6,6 @@ using VelNet; public class RPCTest : NetworkComponent { - // Start is called before the first frame update - void Start() - { - } - - // Update is called once per frame private void Update() { if (Input.GetKeyDown(KeyCode.R)) diff --git a/TestVelGameServer/Packages/VelNetUnity/Runtime/NetworkComponent.cs b/TestVelGameServer/Packages/VelNetUnity/Runtime/NetworkComponent.cs index 70548e4..80bb3ed 100644 --- a/TestVelGameServer/Packages/VelNetUnity/Runtime/NetworkComponent.cs +++ b/TestVelGameServer/Packages/VelNetUnity/Runtime/NetworkComponent.cs @@ -12,6 +12,8 @@ namespace VelNet protected bool IsMine => networkObject != null && networkObject.owner != null && networkObject.owner.isLocal; protected VelNetPlayer Owner => networkObject != null ? networkObject.owner : null; + private MethodInfo[] methodInfos; + /// /// call this in child classes to send a message to other people /// @@ -41,11 +43,16 @@ namespace VelNet int length = reader.ReadInt32(); byte[] parameterData = reader.ReadBytes(length); - MethodInfo[] mInfos = GetType().GetMethods(BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic); - Array.Sort(mInfos, (m1, m2) => string.Compare(m1.Name, m2.Name, StringComparison.Ordinal)); + + if (methodInfos == null) + { + methodInfos = GetType().GetMethods(BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic); + Array.Sort(methodInfos, (m1, m2) => string.Compare(m1.Name, m2.Name, StringComparison.Ordinal)); + } + try { - mInfos[methodIndex].Invoke(this, length > 0 ? new object[] { parameterData } : Array.Empty()); + methodInfos[methodIndex].Invoke(this, length > 0 ? new object[] { parameterData } : Array.Empty()); } catch (Exception e) { @@ -79,9 +86,13 @@ namespace VelNet using MemoryStream mem = new MemoryStream(); using BinaryWriter writer = new BinaryWriter(mem); - MethodInfo[] mInfos = GetType().GetMethods(BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic); - Array.Sort(mInfos, (m1, m2) => string.Compare(m1.Name, m2.Name, StringComparison.Ordinal)); - int methodIndex = mInfos.ToList().FindIndex(m => m.Name == methodName); + if (methodInfos == null) + { + methodInfos = GetType().GetMethods(BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic); + Array.Sort(methodInfos, (m1, m2) => string.Compare(m1.Name, m2.Name, StringComparison.Ordinal)); + } + + int methodIndex = methodInfos.ToList().FindIndex(m => m.Name == methodName); switch (methodIndex) { case > 255: diff --git a/TestVelGameServer/ProjectSettings/RiderScriptEditorPersistedState.asset b/TestVelGameServer/ProjectSettings/RiderScriptEditorPersistedState.asset index a44f28c..f0bca0c 100644 --- a/TestVelGameServer/ProjectSettings/RiderScriptEditorPersistedState.asset +++ b/TestVelGameServer/ProjectSettings/RiderScriptEditorPersistedState.asset @@ -12,4 +12,4 @@ MonoBehaviour: m_Script: {fileID: 0} m_Name: m_EditorClassIdentifier: Unity.Rider.Editor:Packages.Rider.Editor:RiderScriptEditorPersistedState - lastWriteTicks: -8585461721809239573 + lastWriteTicks: -8585461253992250955