From b9e68ed9482473a411fd2b088ae9d8ec4f7abcd1 Mon Sep 17 00:00:00 2001 From: ALEXTANG <574809918@qq.com> Date: Thu, 1 Sep 2022 11:30:38 +0800 Subject: [PATCH] Packet & ProtoTools Packet & ProtoTools --- .../Helper/ProtoGenTools/ProtoGenTools.cs | 4 ++- .../Core/NetWork/Core/INetworkChannel.cs | 3 ++- .../NetWork/Core/INetworkChannelHelper.cs | 5 ++-- .../Core/NetworkManager.NetworkChannelBase.cs | 14 +++++----- .../Runtime/Core/NetWork/Core/Packet.cs | 10 ------- .../Runtime/Core/NetWork/Core/Packet.cs.meta | 3 --- .../NetWork/Helper/NetworkChannelHelper.cs | 11 +++----- .../Runtime/Core/NetWork/Proto/MainPackExt.cs | 4 +-- .../Core/NetWork/Proto/TEngineProto.cs | 27 ++++++------------- .../Protobuf/Proto_CSharp/TEngineProto.cs | 13 ++++----- .../Tools~/Protobuf/Proto_CSharp/msg.cs | 27 +++++++++++++++++++ 11 files changed, 63 insertions(+), 58 deletions(-) delete mode 100644 Assets/TEngine/Scripts/Runtime/Core/NetWork/Core/Packet.cs delete mode 100644 Assets/TEngine/Scripts/Runtime/Core/NetWork/Core/Packet.cs.meta create mode 100644 Assets/TEngine/Tools~/Protobuf/Proto_CSharp/msg.cs diff --git a/Assets/TEngine/Scripts/Editor/Helper/ProtoGenTools/ProtoGenTools.cs b/Assets/TEngine/Scripts/Editor/Helper/ProtoGenTools/ProtoGenTools.cs index 16bf9d33..7cc28669 100644 --- a/Assets/TEngine/Scripts/Editor/Helper/ProtoGenTools/ProtoGenTools.cs +++ b/Assets/TEngine/Scripts/Editor/Helper/ProtoGenTools/ProtoGenTools.cs @@ -57,6 +57,7 @@ namespace TEngine.Editor string s = File.ReadAllText(proto); StringBuilder sb = new StringBuilder(); + sb.Append("using System;\n"); sb.Append("using ProtoBuf;\n"); sb.Append("using TEngine.Runtime;\n"); sb.Append("using System.Collections.Generic;\n"); @@ -100,7 +101,8 @@ namespace TEngine.Editor } msgOpcode.Add(new OpcodeInfo() { Name = msgName, Opcode = ++startOpcode }); - sb.Append($"\t[global::ProtoBuf.ProtoContract()]\n"); + sb.Append($"\t[Serializable,global::ProtoBuf.ProtoContract(Name = @\"{msgName}\")]\n"); + // sb.Append($"\t[global::ProtoBuf.ProtoContract()]\n"); if (useMemoryPool) { sb.Append($"\tpublic partial class {msgName}: IMemory"); diff --git a/Assets/TEngine/Scripts/Runtime/Core/NetWork/Core/INetworkChannel.cs b/Assets/TEngine/Scripts/Runtime/Core/NetWork/Core/INetworkChannel.cs index 38b33ab5..498177a4 100644 --- a/Assets/TEngine/Scripts/Runtime/Core/NetWork/Core/INetworkChannel.cs +++ b/Assets/TEngine/Scripts/Runtime/Core/NetWork/Core/INetworkChannel.cs @@ -1,6 +1,7 @@ using System; using System.Net; using System.Net.Sockets; +using TEngineProto; namespace TEngine.Runtime { @@ -147,7 +148,7 @@ namespace TEngine.Runtime /// /// 消息包类型。 /// 要发送的消息包。 - bool Send(T packet) where T : Packet; + bool Send(MainPack packet); /// /// 向远程主机发送消息包并注册回调 diff --git a/Assets/TEngine/Scripts/Runtime/Core/NetWork/Core/INetworkChannelHelper.cs b/Assets/TEngine/Scripts/Runtime/Core/NetWork/Core/INetworkChannelHelper.cs index 40c855e5..17654155 100644 --- a/Assets/TEngine/Scripts/Runtime/Core/NetWork/Core/INetworkChannelHelper.cs +++ b/Assets/TEngine/Scripts/Runtime/Core/NetWork/Core/INetworkChannelHelper.cs @@ -1,4 +1,5 @@ using System.IO; +using TEngineProto; namespace TEngine.Runtime { @@ -44,7 +45,7 @@ namespace TEngine.Runtime /// 要序列化的消息包。 /// 要序列化的目标流。 /// 是否序列化成功。 - bool Serialize(T packet, Stream destination) where T : Packet; + bool Serialize(MainPack packet, Stream destination); /// /// 反序列化消息包头。 @@ -61,6 +62,6 @@ namespace TEngine.Runtime /// 要反序列化的来源流。 /// 用户自定义错误数据。 /// 反序列化后的消息包。 - Packet DeserializePacket(IPacketHeader packetHeader, Stream source, out object customErrorData); + MainPack DeserializePacket(IPacketHeader packetHeader, Stream source, out object customErrorData); } } \ 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 e50a4022..819be6b5 100644 --- a/Assets/TEngine/Scripts/Runtime/Core/NetWork/Core/NetworkManager.NetworkChannelBase.cs +++ b/Assets/TEngine/Scripts/Runtime/Core/NetWork/Core/NetworkManager.NetworkChannelBase.cs @@ -15,11 +15,11 @@ namespace TEngine.Runtime /// private abstract class NetworkChannelBase : INetworkChannel, IDisposable { - private const float DefaultHeartBeatInterval = 30; + private const float DefaultHeartBeatInterval = 3; private const int MAX_MSG_HANDLE = 256; private readonly string m_Name; - protected readonly Queue m_SendPacketPool; + protected readonly Queue m_SendPacketPool; protected readonly INetworkChannelHelper m_NetworkChannelHelper; protected AddressFamily m_AddressFamily; protected bool m_ResetHeartBeatElapseSecondsWhenReceivePacket; @@ -61,7 +61,7 @@ namespace TEngine.Runtime public NetworkChannelBase(string name, INetworkChannelHelper networkChannelHelper) { m_Name = name ?? string.Empty; - m_SendPacketPool = new Queue(); + m_SendPacketPool = new Queue(); m_NetworkChannelHelper = networkChannelHelper; m_AddressFamily = AddressFamily.Unknown; m_ResetHeartBeatElapseSecondsWhenReceivePacket = false; @@ -470,7 +470,7 @@ namespace TEngine.Runtime /// /// 消息包类型。 /// 要发送的消息包。 - public bool Send(T packet) where T : Packet + public bool Send(MainPack packet) { if (m_Socket == null) { @@ -555,7 +555,7 @@ namespace TEngine.Runtime while (m_SendPacketPool.Count > 0) { - Packet packet = null; + MainPack packet = null; lock (m_SendPacketPool) { packet = m_SendPacketPool.Dequeue(); @@ -658,7 +658,7 @@ namespace TEngine.Runtime try { object customErrorData = null; - Packet packet = m_NetworkChannelHelper.DeserializePacket(m_ReceiveState.PacketHeader, m_ReceiveState.Stream, out customErrorData); + MainPack packet = m_NetworkChannelHelper.DeserializePacket(m_ReceiveState.PacketHeader, m_ReceiveState.Stream, out customErrorData); if (customErrorData != null && NetworkChannelCustomError != null) { @@ -667,7 +667,7 @@ namespace TEngine.Runtime if (packet != null) { - HandleResponse(packet as MainPack); + HandleResponse(packet); } m_ReceiveState.PrepareForPacketHeader(m_NetworkChannelHelper.PacketHeaderLength); diff --git a/Assets/TEngine/Scripts/Runtime/Core/NetWork/Core/Packet.cs b/Assets/TEngine/Scripts/Runtime/Core/NetWork/Core/Packet.cs deleted file mode 100644 index 73ab0c3a..00000000 --- a/Assets/TEngine/Scripts/Runtime/Core/NetWork/Core/Packet.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace TEngine.Runtime -{ - /// - /// 网络消息包基类。 - /// - public abstract class Packet:IMemory - { - public abstract void Clear(); - } -} \ No newline at end of file diff --git a/Assets/TEngine/Scripts/Runtime/Core/NetWork/Core/Packet.cs.meta b/Assets/TEngine/Scripts/Runtime/Core/NetWork/Core/Packet.cs.meta deleted file mode 100644 index 8435f3b5..00000000 --- a/Assets/TEngine/Scripts/Runtime/Core/NetWork/Core/Packet.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 4d54f03c4aed4afbab3b4fc45def97c5 -timeCreated: 1661771739 \ No newline at end of file diff --git a/Assets/TEngine/Scripts/Runtime/Core/NetWork/Helper/NetworkChannelHelper.cs b/Assets/TEngine/Scripts/Runtime/Core/NetWork/Helper/NetworkChannelHelper.cs index 708f7029..73d4b399 100644 --- a/Assets/TEngine/Scripts/Runtime/Core/NetWork/Helper/NetworkChannelHelper.cs +++ b/Assets/TEngine/Scripts/Runtime/Core/NetWork/Helper/NetworkChannelHelper.cs @@ -64,18 +64,15 @@ namespace TEngine.Runtime /// 要序列化的消息包。 /// 要序列化的目标流。 /// 是否序列化成功。 - public bool Serialize(T packet, Stream destination) where T : Packet + public bool Serialize(MainPack packet, Stream destination) { m_CachedStream.SetLength(m_CachedStream.Capacity); // 此行防止 Array.Copy 的数据无法写入 m_CachedStream.Position = 0L; - CSPacketHeader packetHeader = MemoryPool.Acquire(); Serializer.Serialize(m_CachedStream, packetHeader); MemoryPool.Release(packetHeader); - Serializer.SerializeWithLengthPrefix(m_CachedStream, packet, PrefixStyle.Fixed32); MemoryPool.Release((IMemory)packet); - m_CachedStream.WriteTo(destination); return true; } @@ -87,7 +84,7 @@ namespace TEngine.Runtime /// 要反序列化的来源流。 /// 用户自定义错误数据。 /// 反序列化后的消息包。 - public Packet DeserializePacket(IPacketHeader packetHeader, Stream source, out object customErrorData) + public MainPack DeserializePacket(IPacketHeader packetHeader, Stream source, out object customErrorData) { // 注意:此函数并不在主线程调用! customErrorData = null; @@ -99,13 +96,13 @@ namespace TEngine.Runtime return null; } - Packet packet = null; + MainPack packet = null; if (csPacketHeader.IsValid) { Type packetType = typeof(MainPack); if (packetType != null) { - packet = (Packet)RuntimeTypeModel.Default.DeserializeWithLengthPrefix(source, MemoryPool.Acquire(packetType), packetType, PrefixStyle.Fixed32, 0); + packet = (MainPack)RuntimeTypeModel.Default.DeserializeWithLengthPrefix(source, MemoryPool.Acquire(packetType), packetType, PrefixStyle.Fixed32, 0); } else { diff --git a/Assets/TEngine/Scripts/Runtime/Core/NetWork/Proto/MainPackExt.cs b/Assets/TEngine/Scripts/Runtime/Core/NetWork/Proto/MainPackExt.cs index b9149a92..7b5fc45f 100644 --- a/Assets/TEngine/Scripts/Runtime/Core/NetWork/Proto/MainPackExt.cs +++ b/Assets/TEngine/Scripts/Runtime/Core/NetWork/Proto/MainPackExt.cs @@ -2,9 +2,9 @@ namespace TEngineProto { - public partial class MainPack:Packet + public partial class MainPack:IMemory { - public override void Clear() + public void Clear() { requestcode = RequestCode.RequestNone; actioncode = ActionCode.ActionNone; diff --git a/Assets/TEngine/Scripts/Runtime/Core/NetWork/Proto/TEngineProto.cs b/Assets/TEngine/Scripts/Runtime/Core/NetWork/Proto/TEngineProto.cs index 9e973732..8afa6793 100644 --- a/Assets/TEngine/Scripts/Runtime/Core/NetWork/Proto/TEngineProto.cs +++ b/Assets/TEngine/Scripts/Runtime/Core/NetWork/Proto/TEngineProto.cs @@ -1,3 +1,4 @@ +using System; using ProtoBuf; using TEngine.Runtime; using System.Collections.Generic; @@ -56,7 +57,7 @@ namespace TEngineProto } - [global::ProtoBuf.ProtoContract()] + [Serializable,global::ProtoBuf.ProtoContract(Name = @"MainPack")] public partial class MainPack { [global::ProtoBuf.ProtoMember(1)] @@ -82,10 +83,11 @@ namespace TEngineProto public PlayerPack playerpack { get; set; } [global::ProtoBuf.ProtoMember(8)] - public long HeatEchoTime { get; set; } + public float HeatEchoTime { get; set; } + } - [global::ProtoBuf.ProtoContract()] + [Serializable,global::ProtoBuf.ProtoContract(Name = @"LoginPack")] public partial class LoginPack { [global::ProtoBuf.ProtoMember(1)] @@ -98,7 +100,7 @@ namespace TEngineProto } - [global::ProtoBuf.ProtoContract()] + [Serializable,global::ProtoBuf.ProtoContract(Name = @"RoomPack")] public partial class RoomPack { [global::ProtoBuf.ProtoMember(1)] @@ -111,28 +113,15 @@ namespace TEngineProto [global::ProtoBuf.ProtoMember(3)] public int curnum { get; set; } - [global::ProtoBuf.ProtoMember(4)] - public int state { get; set; } - [global::ProtoBuf.ProtoMember(6)] public int roomID { get; set; } - [global::ProtoBuf.ProtoMember(9)] - public int visable { get; set; } - - [global::ProtoBuf.ProtoMember(10)] - public int usePassword { get; set; } - - [global::ProtoBuf.ProtoMember(11)] - [global::System.ComponentModel.DefaultValue("")] - public string password { get; set; } - [global::ProtoBuf.ProtoMember(12)] public List playerpack = new List(); } - [global::ProtoBuf.ProtoContract()] + [Serializable,global::ProtoBuf.ProtoContract(Name = @"PlayerPack")] public partial class PlayerPack { [global::ProtoBuf.ProtoMember(1)] @@ -151,7 +140,7 @@ namespace TEngineProto } - [global::ProtoBuf.ProtoContract()] + [Serializable,global::ProtoBuf.ProtoContract(Name = @"PosPack")] public partial class PosPack { [global::ProtoBuf.ProtoMember(1)] diff --git a/Assets/TEngine/Tools~/Protobuf/Proto_CSharp/TEngineProto.cs b/Assets/TEngine/Tools~/Protobuf/Proto_CSharp/TEngineProto.cs index 68913498..8afa6793 100644 --- a/Assets/TEngine/Tools~/Protobuf/Proto_CSharp/TEngineProto.cs +++ b/Assets/TEngine/Tools~/Protobuf/Proto_CSharp/TEngineProto.cs @@ -1,3 +1,4 @@ +using System; using ProtoBuf; using TEngine.Runtime; using System.Collections.Generic; @@ -56,7 +57,7 @@ namespace TEngineProto } - [global::ProtoBuf.ProtoContract()] + [Serializable,global::ProtoBuf.ProtoContract(Name = @"MainPack")] public partial class MainPack { [global::ProtoBuf.ProtoMember(1)] @@ -82,11 +83,11 @@ namespace TEngineProto public PlayerPack playerpack { get; set; } [global::ProtoBuf.ProtoMember(8)] - public long HeatEchoTime { get; set; } + public float HeatEchoTime { get; set; } } - [global::ProtoBuf.ProtoContract()] + [Serializable,global::ProtoBuf.ProtoContract(Name = @"LoginPack")] public partial class LoginPack { [global::ProtoBuf.ProtoMember(1)] @@ -99,7 +100,7 @@ namespace TEngineProto } - [global::ProtoBuf.ProtoContract()] + [Serializable,global::ProtoBuf.ProtoContract(Name = @"RoomPack")] public partial class RoomPack { [global::ProtoBuf.ProtoMember(1)] @@ -120,7 +121,7 @@ namespace TEngineProto } - [global::ProtoBuf.ProtoContract()] + [Serializable,global::ProtoBuf.ProtoContract(Name = @"PlayerPack")] public partial class PlayerPack { [global::ProtoBuf.ProtoMember(1)] @@ -139,7 +140,7 @@ namespace TEngineProto } - [global::ProtoBuf.ProtoContract()] + [Serializable,global::ProtoBuf.ProtoContract(Name = @"PosPack")] public partial class PosPack { [global::ProtoBuf.ProtoMember(1)] diff --git a/Assets/TEngine/Tools~/Protobuf/Proto_CSharp/msg.cs b/Assets/TEngine/Tools~/Protobuf/Proto_CSharp/msg.cs new file mode 100644 index 00000000..697085b0 --- /dev/null +++ b/Assets/TEngine/Tools~/Protobuf/Proto_CSharp/msg.cs @@ -0,0 +1,27 @@ +// This file was generated by a tool; you should avoid making direct changes. +// Consider using 'partial classes' to extend these types +// Input: msg.proto + +#pragma warning disable CS1591, CS0612, CS3021, IDE1006 +namespace Msg +{ + + [global::ProtoBuf.ProtoContract()] + public partial class Msg : global::ProtoBuf.IExtensible + { + private global::ProtoBuf.IExtension __pbn__extensionData; + global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing) + => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing); + + [global::ProtoBuf.ProtoMember(1)] + [global::System.ComponentModel.DefaultValue("")] + public string msgId { get; set; } = ""; + + [global::ProtoBuf.ProtoMember(2)] + public byte[] msgContent { get; set; } + + } + +} + +#pragma warning restore CS1591, CS0612, CS3021, IDE1006