From c2f0e03c80aa300164883bd1107e7b63683eae12 Mon Sep 17 00:00:00 2001 From: ALEXTANG <574809918@qq.com> Date: Fri, 2 Sep 2022 16:51:31 +0800 Subject: [PATCH] Update Update --- .../Core/NetworkManager.NetworkChannelBase.cs | 4 +-- .../Core/NetworkManager.ReceiveState.cs | 4 +-- .../NetWork/Core/NetworkManager.SendState.cs | 11 +++++++ .../NetWork/Helper/NetworkChannelHelper.cs | 16 ++++------ .../Tcp/NetworkManager.TcpNetworkChannel.cs | 30 ++++++++++--------- ...anager.TcpWithSyncReceiveNetworkChannel.cs | 1 + 6 files changed, 37 insertions(+), 29 deletions(-) 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 8f9f2d89..2ee33463 100644 --- a/Assets/TEngine/Scripts/Runtime/Core/NetWork/Core/NetworkManager.NetworkChannelBase.cs +++ b/Assets/TEngine/Scripts/Runtime/Core/NetWork/Core/NetworkManager.NetworkChannelBase.cs @@ -389,7 +389,7 @@ namespace TEngine.Runtime } m_SendState.Reset(); - m_ReceiveState.PrepareForPacketHeader(m_NetworkChannelHelper.PacketHeaderLength); + m_ReceiveState.SetLength(ReceiveState.DefaultBufferLength); } /// @@ -622,7 +622,7 @@ namespace TEngine.Runtime HandleResponse(packet); } - m_ReceiveState.PrepareForPacketHeader(m_NetworkChannelHelper.PacketHeaderLength); + m_ReceiveState.SetLength(ReceiveState.DefaultBufferLength); } catch (Exception exception) { diff --git a/Assets/TEngine/Scripts/Runtime/Core/NetWork/Core/NetworkManager.ReceiveState.cs b/Assets/TEngine/Scripts/Runtime/Core/NetWork/Core/NetworkManager.ReceiveState.cs index 59873ad3..951942ca 100644 --- a/Assets/TEngine/Scripts/Runtime/Core/NetWork/Core/NetworkManager.ReceiveState.cs +++ b/Assets/TEngine/Scripts/Runtime/Core/NetWork/Core/NetworkManager.ReceiveState.cs @@ -7,7 +7,7 @@ namespace TEngine.Runtime { private sealed class ReceiveState : IDisposable { - private const int DefaultBufferLength = 1024 * 64; + public const int DefaultBufferLength = 1024 * 64; private MemoryStream m_Stream; private bool m_Disposed; @@ -25,7 +25,7 @@ namespace TEngine.Runtime } } - public void PrepareForPacketHeader(int packetHeaderLength) + public void SetLength(int packetHeaderLength) { Reset(packetHeaderLength); } diff --git a/Assets/TEngine/Scripts/Runtime/Core/NetWork/Core/NetworkManager.SendState.cs b/Assets/TEngine/Scripts/Runtime/Core/NetWork/Core/NetworkManager.SendState.cs index 9a573301..bb380185 100644 --- a/Assets/TEngine/Scripts/Runtime/Core/NetWork/Core/NetworkManager.SendState.cs +++ b/Assets/TEngine/Scripts/Runtime/Core/NetWork/Core/NetworkManager.SendState.cs @@ -25,6 +25,17 @@ namespace TEngine.Runtime } } + public void SetLength(int targetLength) + { + if (targetLength < 0) + { + throw new Exception("Target length is invalid."); + } + + m_Stream.Position = 0L; + m_Stream.SetLength(targetLength); + } + public void Reset() { m_Stream.Position = 0L; diff --git a/Assets/TEngine/Scripts/Runtime/Core/NetWork/Helper/NetworkChannelHelper.cs b/Assets/TEngine/Scripts/Runtime/Core/NetWork/Helper/NetworkChannelHelper.cs index ef616a8b..32282c5b 100644 --- a/Assets/TEngine/Scripts/Runtime/Core/NetWork/Helper/NetworkChannelHelper.cs +++ b/Assets/TEngine/Scripts/Runtime/Core/NetWork/Helper/NetworkChannelHelper.cs @@ -60,7 +60,6 @@ namespace TEngine.Runtime /// /// 序列化消息包。 /// - /// 消息包类型。 /// 要序列化的消息包。 /// 要序列化的目标流。 /// 是否序列化成功。 @@ -77,7 +76,6 @@ namespace TEngine.Runtime /// /// 反序列化消息包。 /// - /// 消息包头。 /// 要反序列化的来源流。 /// 用户自定义错误数据。 /// 反序列化后的消息包。 @@ -86,17 +84,13 @@ namespace TEngine.Runtime // 注意:此函数并不在主线程调用! customErrorData = null; - MainPack packet = null; - Type packetType = typeof(MainPack); - if (packetType != null) + var buffer = (source as MemoryStream).GetBuffer(); + int count = BitConverter.ToInt32(buffer, 0); + using (var stream = new System.IO.MemoryStream(buffer,4,count)) { - packet = (MainPack)RuntimeTypeModel.Default.DeserializeWithLengthPrefix(source, MemoryPool.Acquire(packetType), packetType, PrefixStyle.Fixed32, 0); + var result = RuntimeTypeModel.Default.Deserialize(stream,MemoryPool.Acquire(typeof(MainPack)), typeof(MainPack)); + return result as MainPack; } - else - { - Log.Warning("Can not deserialize packet for packet id '{0}'.", packet.actioncode.ToString()); - } - return packet; } /// diff --git a/Assets/TEngine/Scripts/Runtime/Core/NetWork/Tcp/NetworkManager.TcpNetworkChannel.cs b/Assets/TEngine/Scripts/Runtime/Core/NetWork/Tcp/NetworkManager.TcpNetworkChannel.cs index 29e920ad..892ec64b 100644 --- a/Assets/TEngine/Scripts/Runtime/Core/NetWork/Tcp/NetworkManager.TcpNetworkChannel.cs +++ b/Assets/TEngine/Scripts/Runtime/Core/NetWork/Tcp/NetworkManager.TcpNetworkChannel.cs @@ -145,7 +145,11 @@ namespace TEngine.Runtime { try { - m_Socket.BeginSend(m_SendState.Stream.GetBuffer(), (int)m_SendState.Stream.Position, (int)(m_SendState.Stream.Length - m_SendState.Stream.Position), SocketFlags.None, m_SendCallback, m_Socket); + var buffer = m_SendState.Stream.GetBuffer(); + var buffBodyCount = buffer[0]; + var buffTotalCount = m_NetworkChannelHelper.PacketHeaderLength + buffBodyCount; + m_SendState.Stream.SetLength(buffTotalCount); + m_Socket.BeginSend(buffer,0,buffTotalCount, SocketFlags.None, m_SendCallback, m_Socket); } catch (Exception exception) { @@ -187,12 +191,12 @@ namespace TEngine.Runtime throw; } - m_SendState.Stream.Position += bytesSent; - if (m_SendState.Stream.Position < m_SendState.Stream.Length) - { - SendAsync(); - return; - } + // m_SendState.Stream.Position += bytesSent; + // if (m_SendState.Stream.Position < m_SendState.Stream.Length) + // { + // SendAsync(); + // return; + // } m_SentPacketCount++; m_SendState.Reset(); @@ -200,6 +204,7 @@ namespace TEngine.Runtime private void ReceiveAsync() { + m_ReceiveState.Stream.SetLength(ReceiveState.DefaultBufferLength); try { m_Socket.BeginReceive(m_ReceiveState.Stream.GetBuffer(), (int)m_ReceiveState.Stream.Position, (int)(m_ReceiveState.Stream.Length - m_ReceiveState.Stream.Position), SocketFlags.None, m_ReceiveCallback, m_Socket); @@ -250,14 +255,11 @@ namespace TEngine.Runtime return; } - m_ReceiveState.Stream.Position += bytesReceived; - if (m_ReceiveState.Stream.Position < m_ReceiveState.Stream.Length) - { - ReceiveAsync(); - return; - } - m_ReceiveState.Stream.Position = 0L; + + m_ReceiveState.Stream.SetLength(bytesReceived); + + ProtoUtils.PrintBuffer(m_ReceiveState.Stream.GetBuffer()); bool processSuccess = false; processSuccess = ProcessPacket(); diff --git a/Assets/TEngine/Scripts/Runtime/Core/NetWork/Tcp/NetworkManager.TcpWithSyncReceiveNetworkChannel.cs b/Assets/TEngine/Scripts/Runtime/Core/NetWork/Tcp/NetworkManager.TcpWithSyncReceiveNetworkChannel.cs index ec232e89..d22d2d8b 100644 --- a/Assets/TEngine/Scripts/Runtime/Core/NetWork/Tcp/NetworkManager.TcpWithSyncReceiveNetworkChannel.cs +++ b/Assets/TEngine/Scripts/Runtime/Core/NetWork/Tcp/NetworkManager.TcpWithSyncReceiveNetworkChannel.cs @@ -225,6 +225,7 @@ namespace TEngine.Runtime } m_ReceiveState.Stream.Position = 0L; + m_ReceiveState.Stream.SetLength(bytesReceived); bool processSuccess = false; processSuccess = ProcessPacket();