diff --git a/Assets/GameScripts/DotNet/Core/Network/Entity/Session/Session.cs b/Assets/GameScripts/DotNet/Core/Network/Entity/Session/Session.cs index f7fde407..aa9780c0 100644 --- a/Assets/GameScripts/DotNet/Core/Network/Entity/Session/Session.cs +++ b/Assets/GameScripts/DotNet/Core/Network/Entity/Session/Session.cs @@ -19,6 +19,21 @@ namespace TEngine.Core.Network private static readonly Dictionary Sessions = new (); public readonly Dictionary> RequestCallback = new(); +#if TENGINE_UNITY + public delegate void CsMsgDelegate(IResponse msg); + + public readonly Dictionary MsgHandles = new Dictionary(); + + public void RegisterMsgHandler(uint protocolCode,CsMsgDelegate ctx) + { + if (MsgHandles.ContainsKey(protocolCode)) + { + return; + } + MsgHandles.Add(protocolCode,ctx); + } +#endif + public static void Create(ANetworkMessageScheduler networkMessageScheduler, ANetworkChannel channel) { #if TENGINE_DEVELOP diff --git a/Assets/GameScripts/DotNet/Core/Network/Message/Interface/Scheduler/ANetworkMessageScheduler.cs b/Assets/GameScripts/DotNet/Core/Network/Message/Interface/Scheduler/ANetworkMessageScheduler.cs index 853313e2..5142a227 100644 --- a/Assets/GameScripts/DotNet/Core/Network/Message/Interface/Scheduler/ANetworkMessageScheduler.cs +++ b/Assets/GameScripts/DotNet/Core/Network/Message/Interface/Scheduler/ANetworkMessageScheduler.cs @@ -1,5 +1,6 @@ using System; using System.IO; +using Codice.Client.GameUI.Explorer; using TEngine.Core; #pragma warning disable CS8600 @@ -55,6 +56,14 @@ namespace TEngine.Core.Network // 服务器之间发送消息因为走的是MessageHelper、所以接收消息的回调也应该放到MessageHelper里处理 MessageHelper.ResponseHandler(packInfo.RpcId, aResponse); #else + +#if TENGINE_UNITY + if (session.MsgHandles.TryGetValue(packInfo.ProtocolCode,out var msgDelegate)) + { + msgDelegate.Invoke(aResponse); + return; + } +#endif // 这个一般是客户端Session.Call发送时使用的、目前这个逻辑只有Unity客户端时使用 if (!session.RequestCallback.TryGetValue(packInfo.RpcId, out var action))