mirror of
https://github.com/Alex-Rachel/TEngine.git
synced 2025-08-07 16:45:10 +00:00
移除冗余设计
移除冗余设计
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
@@ -1,16 +0,0 @@
|
||||
namespace TEngine.Runtime
|
||||
{
|
||||
/// <summary>
|
||||
/// 网络消息包头接口。
|
||||
/// </summary>
|
||||
public interface IPacketHeader
|
||||
{
|
||||
/// <summary>
|
||||
/// 获取网络消息包长度。
|
||||
/// </summary>
|
||||
int PacketLength
|
||||
{
|
||||
get;
|
||||
}
|
||||
}
|
||||
}
|
@@ -1,3 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 1a61d331daf74fe48bffbb083f016cb5
|
||||
timeCreated: 1661771898
|
@@ -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)
|
||||
{
|
||||
|
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -1,11 +0,0 @@
|
||||
using System;
|
||||
using ProtoBuf;
|
||||
|
||||
namespace TEngine.Runtime
|
||||
{
|
||||
[Serializable, ProtoContract(Name = @"CSPacketHeader")]
|
||||
public sealed class CSPacketHeader : PacketHeaderBase
|
||||
{
|
||||
|
||||
}
|
||||
}
|
@@ -1,11 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 383e04755715b054f9e57b1ab1d322af
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@@ -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>
|
||||
|
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
@@ -1,11 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 279045bf4ec72144aa03880102a04057
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@@ -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)
|
||||
{
|
||||
|
@@ -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;
|
||||
}
|
||||
|
@@ -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)
|
||||
{
|
||||
|
Reference in New Issue
Block a user