移除冗余设计

移除冗余设计
This commit is contained in:
ALEXTANG
2022-09-01 17:53:31 +08:00
parent e1a0f851f2
commit 610e1e847f
13 changed files with 15 additions and 223 deletions

View File

@@ -47,21 +47,12 @@ namespace TEngine.Runtime
/// <returns>是否序列化成功。</returns>
bool Serialize(MainPack packet, Stream destination);
/// <summary>
/// 反序列化消息包头。
/// </summary>
/// <param name="source">要反序列化的来源流。</param>
/// <param name="customErrorData">用户自定义错误数据。</param>
/// <returns>反序列化后的消息包头。</returns>
IPacketHeader DeserializePacketHeader(Stream source, out object customErrorData);
/// <summary>
/// 反序列化消息包。
/// </summary>
/// <param name="packetHeader">消息包头。</param>
/// <param name="source">要反序列化的来源流。</param>
/// <param name="customErrorData">用户自定义错误数据。</param>
/// <returns>反序列化后的消息包。</returns>
MainPack DeserializePacket(IPacketHeader packetHeader, Stream source, out object customErrorData);
MainPack DeserializePacket(Stream source, out object customErrorData);
}
}

View File

@@ -1,16 +0,0 @@
namespace TEngine.Runtime
{
/// <summary>
/// 网络消息包头接口。
/// </summary>
public interface IPacketHeader
{
/// <summary>
/// 获取网络消息包长度。
/// </summary>
int PacketLength
{
get;
}
}
}

View File

@@ -1,3 +0,0 @@
fileFormatVersion: 2
guid: 1a61d331daf74fe48bffbb083f016cb5
timeCreated: 1661771898

View File

@@ -600,54 +600,6 @@ namespace TEngine.Runtime
{
}
protected virtual bool ProcessPacketHeader()
{
try
{
object customErrorData = null;
IPacketHeader packetHeader = m_NetworkChannelHelper.DeserializePacketHeader(m_ReceiveState.Stream, out customErrorData);
if (customErrorData != null && NetworkChannelCustomError != null)
{
NetworkChannelCustomError(this, customErrorData);
}
if (packetHeader == null)
{
string errorMessage = "Packet header is invalid.";
if (NetworkChannelError != null)
{
NetworkChannelError(this, NetworkErrorCode.DeserializePacketHeaderError, SocketError.Success, errorMessage);
return false;
}
throw new Exception(errorMessage);
}
m_ReceiveState.PrepareForPacket(packetHeader);
if (packetHeader.PacketLength <= 0)
{
bool processSuccess = ProcessPacket();
m_ReceivedPacketCount++;
return processSuccess;
}
}
catch (Exception exception)
{
m_Active = false;
if (NetworkChannelError != null)
{
SocketException socketException = exception as SocketException;
NetworkChannelError(this, NetworkErrorCode.DeserializePacketHeaderError, socketException != null ? socketException.SocketErrorCode : SocketError.Success, exception.ToString());
return false;
}
throw;
}
return true;
}
protected virtual bool ProcessPacket()
{
lock (m_HeartBeatState)
@@ -658,7 +610,7 @@ namespace TEngine.Runtime
try
{
object customErrorData = null;
MainPack packet = m_NetworkChannelHelper.DeserializePacket(m_ReceiveState.PacketHeader, m_ReceiveState.Stream, out customErrorData);
MainPack packet = m_NetworkChannelHelper.DeserializePacket(m_ReceiveState.Stream, out customErrorData);
if (customErrorData != null && NetworkChannelCustomError != null)
{

View File

@@ -9,13 +9,11 @@ namespace TEngine.Runtime
{
private const int DefaultBufferLength = 1024 * 64;
private MemoryStream m_Stream;
private IPacketHeader m_PacketHeader;
private bool m_Disposed;
public ReceiveState()
{
m_Stream = new MemoryStream(DefaultBufferLength);
m_PacketHeader = null;
m_Disposed = false;
}
@@ -27,27 +25,9 @@ namespace TEngine.Runtime
}
}
public IPacketHeader PacketHeader
{
get
{
return m_PacketHeader;
}
}
public void PrepareForPacketHeader(int packetHeaderLength)
{
Reset(packetHeaderLength, null);
}
public void PrepareForPacket(IPacketHeader packetHeader)
{
if (packetHeader == null)
{
throw new Exception("Packet header is invalid.");
}
Reset(packetHeader.PacketLength, packetHeader);
Reset(packetHeaderLength);
}
public void Dispose()
@@ -75,7 +55,7 @@ namespace TEngine.Runtime
m_Disposed = true;
}
private void Reset(int targetLength, IPacketHeader packetHeader)
private void Reset(int targetLength)
{
if (targetLength < 0)
{
@@ -84,7 +64,6 @@ namespace TEngine.Runtime
m_Stream.Position = 0L;
m_Stream.SetLength(targetLength);
m_PacketHeader = packetHeader;
}
}
}

View File

@@ -1,11 +0,0 @@
using System;
using ProtoBuf;
namespace TEngine.Runtime
{
[Serializable, ProtoContract(Name = @"CSPacketHeader")]
public sealed class CSPacketHeader : PacketHeaderBase
{
}
}

View File

@@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 383e04755715b054f9e57b1ab1d322af
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -68,9 +68,6 @@ namespace TEngine.Runtime
{
m_CachedStream.SetLength(m_CachedStream.Capacity); // 此行防止 Array.Copy 的数据无法写入
m_CachedStream.Position = 0L;
CSPacketHeader packetHeader = MemoryPool.Acquire<CSPacketHeader>();
Serializer.Serialize(m_CachedStream, packetHeader);
MemoryPool.Release(packetHeader);
Serializer.SerializeWithLengthPrefix(m_CachedStream, packet, PrefixStyle.Fixed32);
MemoryPool.Release((IMemory)packet);
m_CachedStream.WriteTo(destination);
@@ -84,47 +81,24 @@ namespace TEngine.Runtime
/// <param name="source">要反序列化的来源流。</param>
/// <param name="customErrorData">用户自定义错误数据。</param>
/// <returns>反序列化后的消息包。</returns>
public MainPack DeserializePacket(IPacketHeader packetHeader, Stream source, out object customErrorData)
public MainPack DeserializePacket(Stream source, out object customErrorData)
{
// 注意:此函数并不在主线程调用!
customErrorData = null;
CSPacketHeader csPacketHeader = packetHeader as CSPacketHeader;
if (csPacketHeader == null)
{
Log.Warning("Packet header is invalid.");
return null;
}
MainPack packet = null;
if (csPacketHeader.IsValid)
Type packetType = typeof(MainPack);
if (packetType != null)
{
Type packetType = typeof(MainPack);
if (packetType != null)
{
packet = (MainPack)RuntimeTypeModel.Default.DeserializeWithLengthPrefix(source, MemoryPool.Acquire(packetType), packetType, PrefixStyle.Fixed32, 0);
}
else
{
Log.Warning("Can not deserialize packet for packet id '{0}'.", csPacketHeader.Id.ToString());
}
packet = (MainPack)RuntimeTypeModel.Default.DeserializeWithLengthPrefix(source, MemoryPool.Acquire(packetType), packetType, PrefixStyle.Fixed32, 0);
}
else
{
Log.Warning("Packet header is invalid.");
Log.Warning("Can not deserialize packet for packet id '{0}'.", packet.actioncode.ToString());
}
MemoryPool.Release(csPacketHeader);
return packet;
}
public IPacketHeader DeserializePacketHeader(Stream source, out object customErrorData)
{
// 注意:此函数并不在主线程调用!
customErrorData = null;
return (IPacketHeader)RuntimeTypeModel.Default.Deserialize(source, MemoryPool.Acquire<CSPacketHeader>(), typeof(CSPacketHeader));
}
/// <summary>
/// 关闭并清理网络频道辅助器。
/// </summary>

View File

@@ -1,31 +0,0 @@
namespace TEngine.Runtime
{
public abstract class PacketHeaderBase : IPacketHeader, IMemory
{
public int Id
{
get;
set;
}
public int PacketLength
{
get;
set;
}
public bool IsValid
{
get
{
return Id > 0 && PacketLength >= 0;
}
}
public void Clear()
{
Id = 0;
PacketLength = 0;
}
}
}

View File

@@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 279045bf4ec72144aa03880102a04057
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -260,15 +260,8 @@ namespace TEngine.Runtime
m_ReceiveState.Stream.Position = 0L;
bool processSuccess = false;
if (m_ReceiveState.PacketHeader != null)
{
processSuccess = ProcessPacket();
m_ReceivedPacketCount++;
}
else
{
processSuccess = ProcessPacketHeader();
}
processSuccess = ProcessPacket();
m_ReceivedPacketCount++;
if (processSuccess)
{

View File

@@ -227,15 +227,8 @@ namespace TEngine.Runtime
m_ReceiveState.Stream.Position = 0L;
bool processSuccess = false;
if (m_ReceiveState.PacketHeader != null)
{
processSuccess = ProcessPacket();
m_ReceivedPacketCount++;
}
else
{
processSuccess = ProcessPacketHeader();
}
processSuccess = ProcessPacket();
m_ReceivedPacketCount++;
return processSuccess;
}

View File

@@ -253,15 +253,8 @@ namespace TEngine.Runtime
m_ReceiveState.Stream.Position = 0L;
bool processSuccess = false;
if (m_ReceiveState.PacketHeader != null)
{
processSuccess = ProcessPacket();
m_ReceivedPacketCount++;
}
else
{
processSuccess = ProcessPacketHeader();
}
processSuccess = ProcessPacket();
m_ReceivedPacketCount++;
if (processSuccess)
{