[+] Implementation SendAndRegister

[+] Implementation SendAndRegister
This commit is contained in:
ALEXTANG
2023-04-21 13:41:28 +08:00
parent b791c1a44d
commit 663c1342f7
2 changed files with 37 additions and 26 deletions

View File

@@ -120,7 +120,8 @@ namespace TEngine
/// </summary>
/// <param name="msgId">网络消息包id。</param>
/// <param name="msgDelegate">要注册的网络消息包处理函数。</param>
void RegisterMsgHandler(int msgId, CsMsgDelegate msgDelegate);
/// <param name="checkRepeat">是否检测重复。</param>
void RegisterMsgHandler(int msgId, CsMsgDelegate msgDelegate, bool checkRepeat = false);
/// <summary>
/// 移除网络消息包处理函数。
@@ -168,10 +169,10 @@ namespace TEngine
/// 向远程主机发送消息包并注册消息回调。
/// </summary>
/// <typeparam name="T">消息包类型。</typeparam>
/// <param name="pack">要发送的消息包。</param>
/// <param name="packet">要发送的消息包。</param>
/// <param name="resHandler">要注册的回调。</param>
/// <param name="needShowWaitUI">是否需要等待UI。</param>
/// <returns>消息包是否发送成功。</returns>
bool Send<T>(T pack, CsMsgDelegate resHandler, bool needShowWaitUI = false) where T : Packet;
bool Send<T>(T packet, CsMsgDelegate resHandler, bool needShowWaitUI = false) where T : Packet;
}
}

View File

@@ -231,13 +231,16 @@ namespace TEngine
/// </summary>
/// <param name="msgId">网络消息包id。</param>
/// <param name="msgDelegate">要注册的网络消息包处理函数。</param>
public void RegisterMsgHandler(int msgId, CsMsgDelegate msgDelegate)
/// <param name="checkRepeat">是否检测重复。</param>
public void RegisterMsgHandler(int msgId, CsMsgDelegate msgDelegate,bool checkRepeat = true)
{
if (msgDelegate == null)
{
throw new GameFrameworkException("Msg handler is invalid.");
}
lock (_msgHandlerMap)
{
if (!_msgHandlerMap.TryGetValue(msgId, out var listHandle))
{
listHandle = new List<CsMsgDelegate>();
@@ -251,11 +254,15 @@ namespace TEngine
listHandle.Add(msgDelegate);
}
else
{
if (checkRepeat)
{
Log.Error("-------------repeat RegCmdHandle MsgId:{0}-----------",msgId);
}
}
}
}
}
/// <summary>
/// 移除网络消息包处理函数。
@@ -263,6 +270,8 @@ namespace TEngine
/// <param name="msgId">网络消息包id。</param>
/// <param name="msgDelegate">要注册的网络消息包处理函数。</param>
public void RemoveMsgHandler(int msgId, CsMsgDelegate msgDelegate)
{
lock (_msgHandlerMap)
{
if (!_msgHandlerMap.TryGetValue(msgId, out List<CsMsgDelegate> listHandle))
{
@@ -274,6 +283,7 @@ namespace TEngine
listHandle.Remove(msgDelegate);
}
}
}
/// <summary>
/// 连接到远程主机。
@@ -452,14 +462,14 @@ namespace TEngine
/// 向远程主机发送消息包并注册消息回调。
/// </summary>
/// <typeparam name="T">消息包类型。</typeparam>
/// <param name="pack">要发送的消息包。</param>
/// <param name="packet">要发送的消息包。</param>
/// <param name="resHandler">要注册的回调。</param>
/// <param name="needShowWaitUI">是否需要等待UI。</param>
/// <returns>消息包是否发送成功。</returns>
public bool Send<T>(T pack, CsMsgDelegate resHandler, bool needShowWaitUI = false) where T : Packet
public bool Send<T>(T packet, CsMsgDelegate resHandler, bool needShowWaitUI = false) where T : Packet
{
//TODO
return true;
RegisterMsgHandler(packet.Id,resHandler,false);
return Send(packet);
}
/// <summary>