From 40b12278687202d6a4bd48f085576e7dbd7e511b Mon Sep 17 00:00:00 2001 From: JohnCorby Date: Fri, 14 Jan 2022 00:21:51 -0800 Subject: [PATCH] it works!!!!!!!!!!!!!!!!!!!!!! --- QSB/Messaging/QSBMessageManager.cs | 42 +++++++++++++++++++----------- 1 file changed, 27 insertions(+), 15 deletions(-) diff --git a/QSB/Messaging/QSBMessageManager.cs b/QSB/Messaging/QSBMessageManager.cs index 4323f7dc..c9479177 100644 --- a/QSB/Messaging/QSBMessageManager.cs +++ b/QSB/Messaging/QSBMessageManager.cs @@ -1,5 +1,6 @@ using Mirror; using OWML.Common; +using OWML.Utils; using QSB.ClientServerStateSync; using QSB.ClientServerStateSync.Messages; using QSB.Player; @@ -7,15 +8,11 @@ using QSB.Player.Messages; using QSB.Player.TransformSync; using QSB.Utility; using QSB.WorldSync; -using QuantumUNET; -using QuantumUNET.Components; -using QuantumUNET.Messages; using System; -using System.Collections.Generic; using System.Linq; +using System.Linq.Expressions; using System.Reflection; using System.Runtime.CompilerServices; -using System.Runtime.Serialization; namespace QSB.Messaging { @@ -41,12 +38,12 @@ namespace QSB.Messaging { DebugLog.DebugWrite("REGISTERING MESSAGES"); - var NetworkServer_RegisterHandlerSafe = typeof(NetworkServer).GetMethod(nameof(NetworkServer.RegisterHandlerSafe)); - var NetworkClient_RegisterHandlerSafe = typeof(NetworkClient).GetMethod(nameof(NetworkClient.RegisterHandlerSafe)); - var OnServerReceiveRaw = typeof(QSBMessageManager).GetMethod(nameof(QSBMessageManager.OnServerReceiveRaw)); - var OnClientReceiveRaw = typeof(QSBMessageManager).GetMethod(nameof(QSBMessageManager.OnClientReceiveRaw)); - var OnServerReceive = typeof(QSBMessageManager).GetMethod(nameof(QSBMessageManager.OnServerReceive)); - var OnClientReceive = typeof(QSBMessageManager).GetMethod(nameof(QSBMessageManager.OnClientReceive)); + var NetworkServer_RegisterHandlerSafe = typeof(NetworkServer).GetAnyMethod(nameof(NetworkServer.RegisterHandlerSafe)); + var NetworkClient_RegisterHandlerSafe = typeof(NetworkClient).GetAnyMethod(nameof(NetworkClient.RegisterHandlerSafe)); + var OnServerReceiveRaw = typeof(QSBMessageManager).GetAnyMethod(nameof(QSBMessageManager.OnServerReceiveRaw)); + var OnClientReceiveRaw = typeof(QSBMessageManager).GetAnyMethod(nameof(QSBMessageManager.OnClientReceiveRaw)); + var OnServerReceive = typeof(QSBMessageManager).GetAnyMethod(nameof(QSBMessageManager.OnServerReceive)); + var OnClientReceive = typeof(QSBMessageManager).GetAnyMethod(nameof(QSBMessageManager.OnClientReceive)); foreach (var type in _types) { @@ -64,10 +61,25 @@ namespace QSB.Messaging OnClientReceive2 = OnClientReceive; } - var serverHandler = OnServerReceive2.MakeGenericMethod(type).CreateDelegate(typeof(Action<>)); - var clientHandler = OnClientReceive2.MakeGenericMethod(type).CreateDelegate(typeof(Action<>)); - DebugLog.DebugWrite($"server handler = {serverHandler}"); - DebugLog.DebugWrite($"client handler = {clientHandler}"); + var OnServerReceive3 = OnServerReceive2.MakeGenericMethod(type); + var OnClientReceive3 = OnClientReceive2.MakeGenericMethod(type); + + var serverHandler = OnServerReceive3.CreateDelegate( + Expression.GetDelegateType( + OnServerReceive3.GetParameters() + .Select(x => x.ParameterType) + .Append(OnServerReceive3.ReturnType) + .ToArray() + ) + ); + var clientHandler = OnClientReceive3.CreateDelegate( + Expression.GetDelegateType( + OnClientReceive3.GetParameters() + .Select(x => x.ParameterType) + .Append(OnServerReceive3.ReturnType) + .ToArray() + ) + ); NetworkServer_RegisterHandlerSafe.MakeGenericMethod(type).Invoke(null, new object[] { serverHandler }); NetworkClient_RegisterHandlerSafe.MakeGenericMethod(type).Invoke(null, new object[] { clientHandler }); }