diff --git a/Assets/TEngine/Scripts/Runtime/Core/NetWork/Core/INetworkChannel.cs b/Assets/TEngine/Scripts/Runtime/Core/NetWork/Core/INetworkChannel.cs index 783aa2e5..38b33ab5 100644 --- a/Assets/TEngine/Scripts/Runtime/Core/NetWork/Core/INetworkChannel.cs +++ b/Assets/TEngine/Scripts/Runtime/Core/NetWork/Core/INetworkChannel.cs @@ -112,7 +112,15 @@ namespace TEngine.Runtime /// /// /// - void RegisterHandler(int actionId, CsMsgDelegate msgDelegate); + /// + void RegisterHandler(int actionId, CsMsgDelegate msgDelegate,bool checkRepeat = true); + + /// + /// 注销网络消息包处理函数。 + /// + /// + /// + void RmvHandler(int actionId, CsMsgDelegate msgDelegate); /// /// 连接到远程主机。 @@ -139,6 +147,14 @@ namespace TEngine.Runtime /// /// 消息包类型。 /// 要发送的消息包。 - void Send(T packet) where T : Packet; + bool Send(T packet) where T : Packet; + + /// + /// 向远程主机发送消息包并注册回调 + /// + /// + /// + /// + bool SendCsMsg(TEngineProto.MainPack pack, CsMsgDelegate resHandler = null); } } \ No newline at end of file diff --git a/Assets/TEngine/Scripts/Runtime/Core/NetWork/Core/NetworkManager.NetworkChannelBase.cs b/Assets/TEngine/Scripts/Runtime/Core/NetWork/Core/NetworkManager.NetworkChannelBase.cs index 4c9ee08e..e50a4022 100644 --- a/Assets/TEngine/Scripts/Runtime/Core/NetWork/Core/NetworkManager.NetworkChannelBase.cs +++ b/Assets/TEngine/Scripts/Runtime/Core/NetWork/Core/NetworkManager.NetworkChannelBase.cs @@ -15,7 +15,7 @@ namespace TEngine.Runtime /// private abstract class NetworkChannelBase : INetworkChannel, IDisposable { - private const float DefaultHeartBeatInterval = 30f; + private const float DefaultHeartBeatInterval = 30; private const int MAX_MSG_HANDLE = 256; private readonly string m_Name; @@ -292,8 +292,9 @@ namespace TEngine.Runtime /// /// /// + /// /// - public void RegisterHandler(int actionId, CsMsgDelegate msgDelegate) + public void RegisterHandler(int actionId, CsMsgDelegate msgDelegate,bool checkRepeat = true) { if (msgDelegate == null) { @@ -315,7 +316,10 @@ namespace TEngine.Runtime } else { - Log.Warning("-------------repeat RegCmdHandle ActionCode:{0}-----------", (ActionCode)actionId); + if (checkRepeat) + { + Log.Warning("-------------repeat RegCmdHandle ActionCode:{0}-----------", (ActionCode)actionId); + } } } } @@ -434,13 +438,39 @@ namespace TEngine.Runtime } } } + + /// + /// 发送消息包并注册回调 + /// + /// + /// + /// + /// + public bool SendCsMsg(MainPack pack, CsMsgDelegate resHandler = null) + { + var ret = Send(pack); + if (!ret) + { + TLogger.LogError("SendCSMsg Error"); + } + else + { + if (resHandler != null) + { + RegTimeOutHandle((uint)pack.actioncode, resHandler); + RegisterHandler((int)pack.actioncode, resHandler, false); + } + } + + return ret; + } /// /// 向远程主机发送消息包。 /// /// 消息包类型。 /// 要发送的消息包。 - public void Send(T packet) where T : Packet + public bool Send(T packet) where T : Packet { if (m_Socket == null) { @@ -448,7 +478,7 @@ namespace TEngine.Runtime if (NetworkChannelError != null) { NetworkChannelError(this, NetworkErrorCode.SendError, SocketError.Success, errorMessage); - return; + return false; } throw new Exception(errorMessage); @@ -460,7 +490,7 @@ namespace TEngine.Runtime if (NetworkChannelError != null) { NetworkChannelError(this, NetworkErrorCode.SendError, SocketError.Success, errorMessage); - return; + return false; } throw new Exception(errorMessage); @@ -472,7 +502,7 @@ namespace TEngine.Runtime if (NetworkChannelError != null) { NetworkChannelError(this, NetworkErrorCode.SendError, SocketError.Success, errorMessage); - return; + return false; } throw new Exception(errorMessage); @@ -482,6 +512,8 @@ namespace TEngine.Runtime { m_SendPacketPool.Enqueue(packet); } + + return true; } /// diff --git a/Assets/TEngine/Tools~/Protobuf/Proto/TEngineProto.proto b/Assets/TEngine/Tools~/Protobuf/Proto/TEngineProto.proto index 48868cc6..ce5ff082 100644 --- a/Assets/TEngine/Tools~/Protobuf/Proto/TEngineProto.proto +++ b/Assets/TEngine/Tools~/Protobuf/Proto/TEngineProto.proto @@ -41,7 +41,7 @@ message MainPack string extstr = 5; repeated RoomPack roompack = 6; //房间包,repeated加上为list PlayerPack playerpack = 7; - long HeatEchoTime = 8; //心跳包回包时间 + float HeatEchoTime = 8; //心跳包回包时间 } message LoginPack