From 663c1342f752fd73861c1f5e7b3686b6f3fee27f Mon Sep 17 00:00:00 2001
From: ALEXTANG <574809918@qq.com>
Date: Fri, 21 Apr 2023 13:41:28 +0800
Subject: [PATCH] [+] Implementation SendAndRegister
[+] Implementation SendAndRegister
---
.../Network/Interface/INetworkChannel.cs | 7 ++-
.../NetworkManager.NetworkChannelBase.cs | 56 +++++++++++--------
2 files changed, 37 insertions(+), 26 deletions(-)
diff --git a/Assets/TEngine/Runtime/GameFramework/Network/Interface/INetworkChannel.cs b/Assets/TEngine/Runtime/GameFramework/Network/Interface/INetworkChannel.cs
index 0d337942..6a37e12a 100644
--- a/Assets/TEngine/Runtime/GameFramework/Network/Interface/INetworkChannel.cs
+++ b/Assets/TEngine/Runtime/GameFramework/Network/Interface/INetworkChannel.cs
@@ -120,7 +120,8 @@ namespace TEngine
///
/// 网络消息包id。
/// 要注册的网络消息包处理函数。
- void RegisterMsgHandler(int msgId, CsMsgDelegate msgDelegate);
+ /// 是否检测重复。
+ void RegisterMsgHandler(int msgId, CsMsgDelegate msgDelegate, bool checkRepeat = false);
///
/// 移除网络消息包处理函数。
@@ -168,10 +169,10 @@ namespace TEngine
/// 向远程主机发送消息包并注册消息回调。
///
/// 消息包类型。
- /// 要发送的消息包。
+ /// 要发送的消息包。
/// 要注册的回调。
/// 是否需要等待UI。
/// 消息包是否发送成功。
- bool Send(T pack, CsMsgDelegate resHandler, bool needShowWaitUI = false) where T : Packet;
+ bool Send(T packet, CsMsgDelegate resHandler, bool needShowWaitUI = false) where T : Packet;
}
}
diff --git a/Assets/TEngine/Runtime/GameFramework/Network/NetworkManager.NetworkChannelBase.cs b/Assets/TEngine/Runtime/GameFramework/Network/NetworkManager.NetworkChannelBase.cs
index 1a5b7282..61aac9ca 100644
--- a/Assets/TEngine/Runtime/GameFramework/Network/NetworkManager.NetworkChannelBase.cs
+++ b/Assets/TEngine/Runtime/GameFramework/Network/NetworkManager.NetworkChannelBase.cs
@@ -231,28 +231,35 @@ namespace TEngine
///
/// 网络消息包id。
/// 要注册的网络消息包处理函数。
- public void RegisterMsgHandler(int msgId, CsMsgDelegate msgDelegate)
+ /// 是否检测重复。
+ public void RegisterMsgHandler(int msgId, CsMsgDelegate msgDelegate,bool checkRepeat = true)
{
if (msgDelegate == null)
{
throw new GameFrameworkException("Msg handler is invalid.");
}
- if (!_msgHandlerMap.TryGetValue(msgId, out var listHandle))
+ lock (_msgHandlerMap)
{
- listHandle = new List();
- _msgHandlerMap[msgId] = listHandle;
- }
-
- if (listHandle != null)
- {
- if (!listHandle.Contains(msgDelegate))
+ if (!_msgHandlerMap.TryGetValue(msgId, out var listHandle))
{
- listHandle.Add(msgDelegate);
+ listHandle = new List();
+ _msgHandlerMap[msgId] = listHandle;
}
- else
+
+ if (listHandle != null)
{
- Log.Error("-------------repeat RegCmdHandle MsgId:{0}-----------",msgId);
+ if (!listHandle.Contains(msgDelegate))
+ {
+ listHandle.Add(msgDelegate);
+ }
+ else
+ {
+ if (checkRepeat)
+ {
+ Log.Error("-------------repeat RegCmdHandle MsgId:{0}-----------",msgId);
+ }
+ }
}
}
}
@@ -264,14 +271,17 @@ namespace TEngine
/// 要注册的网络消息包处理函数。
public void RemoveMsgHandler(int msgId, CsMsgDelegate msgDelegate)
{
- if (!_msgHandlerMap.TryGetValue(msgId, out List listHandle))
+ lock (_msgHandlerMap)
{
- return;
- }
-
- if (listHandle != null)
- {
- listHandle.Remove(msgDelegate);
+ if (!_msgHandlerMap.TryGetValue(msgId, out List listHandle))
+ {
+ return;
+ }
+
+ if (listHandle != null)
+ {
+ listHandle.Remove(msgDelegate);
+ }
}
}
@@ -452,14 +462,14 @@ namespace TEngine
/// 向远程主机发送消息包并注册消息回调。
///
/// 消息包类型。
- /// 要发送的消息包。
+ /// 要发送的消息包。
/// 要注册的回调。
/// 是否需要等待UI。
/// 消息包是否发送成功。
- public bool Send(T pack, CsMsgDelegate resHandler, bool needShowWaitUI = false) where T : Packet
+ public bool Send(T packet, CsMsgDelegate resHandler, bool needShowWaitUI = false) where T : Packet
{
- //TODO
- return true;
+ RegisterMsgHandler(packet.Id,resHandler,false);
+ return Send(packet);
}
///