mirror of
https://github.com/Alex-Rachel/TEngine.git
synced 2025-08-14 16:51:28 +00:00
移除冗余设计
移除冗余设计
This commit is contained in:
@@ -47,21 +47,12 @@ namespace TEngine.Runtime
|
|||||||
/// <returns>是否序列化成功。</returns>
|
/// <returns>是否序列化成功。</returns>
|
||||||
bool Serialize(MainPack packet, Stream destination);
|
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>
|
||||||
/// 反序列化消息包。
|
/// 反序列化消息包。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="packetHeader">消息包头。</param>
|
|
||||||
/// <param name="source">要反序列化的来源流。</param>
|
/// <param name="source">要反序列化的来源流。</param>
|
||||||
/// <param name="customErrorData">用户自定义错误数据。</param>
|
/// <param name="customErrorData">用户自定义错误数据。</param>
|
||||||
/// <returns>反序列化后的消息包。</returns>
|
/// <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()
|
protected virtual bool ProcessPacket()
|
||||||
{
|
{
|
||||||
lock (m_HeartBeatState)
|
lock (m_HeartBeatState)
|
||||||
@@ -658,7 +610,7 @@ namespace TEngine.Runtime
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
object customErrorData = null;
|
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)
|
if (customErrorData != null && NetworkChannelCustomError != null)
|
||||||
{
|
{
|
||||||
|
@@ -9,13 +9,11 @@ namespace TEngine.Runtime
|
|||||||
{
|
{
|
||||||
private const int DefaultBufferLength = 1024 * 64;
|
private const int DefaultBufferLength = 1024 * 64;
|
||||||
private MemoryStream m_Stream;
|
private MemoryStream m_Stream;
|
||||||
private IPacketHeader m_PacketHeader;
|
|
||||||
private bool m_Disposed;
|
private bool m_Disposed;
|
||||||
|
|
||||||
public ReceiveState()
|
public ReceiveState()
|
||||||
{
|
{
|
||||||
m_Stream = new MemoryStream(DefaultBufferLength);
|
m_Stream = new MemoryStream(DefaultBufferLength);
|
||||||
m_PacketHeader = null;
|
|
||||||
m_Disposed = false;
|
m_Disposed = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -27,27 +25,9 @@ namespace TEngine.Runtime
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public IPacketHeader PacketHeader
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return m_PacketHeader;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void PrepareForPacketHeader(int packetHeaderLength)
|
public void PrepareForPacketHeader(int packetHeaderLength)
|
||||||
{
|
{
|
||||||
Reset(packetHeaderLength, null);
|
Reset(packetHeaderLength);
|
||||||
}
|
|
||||||
|
|
||||||
public void PrepareForPacket(IPacketHeader packetHeader)
|
|
||||||
{
|
|
||||||
if (packetHeader == null)
|
|
||||||
{
|
|
||||||
throw new Exception("Packet header is invalid.");
|
|
||||||
}
|
|
||||||
|
|
||||||
Reset(packetHeader.PacketLength, packetHeader);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Dispose()
|
public void Dispose()
|
||||||
@@ -75,7 +55,7 @@ namespace TEngine.Runtime
|
|||||||
m_Disposed = true;
|
m_Disposed = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Reset(int targetLength, IPacketHeader packetHeader)
|
private void Reset(int targetLength)
|
||||||
{
|
{
|
||||||
if (targetLength < 0)
|
if (targetLength < 0)
|
||||||
{
|
{
|
||||||
@@ -84,7 +64,6 @@ namespace TEngine.Runtime
|
|||||||
|
|
||||||
m_Stream.Position = 0L;
|
m_Stream.Position = 0L;
|
||||||
m_Stream.SetLength(targetLength);
|
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.SetLength(m_CachedStream.Capacity); // 此行防止 Array.Copy 的数据无法写入
|
||||||
m_CachedStream.Position = 0L;
|
m_CachedStream.Position = 0L;
|
||||||
CSPacketHeader packetHeader = MemoryPool.Acquire<CSPacketHeader>();
|
|
||||||
Serializer.Serialize(m_CachedStream, packetHeader);
|
|
||||||
MemoryPool.Release(packetHeader);
|
|
||||||
Serializer.SerializeWithLengthPrefix(m_CachedStream, packet, PrefixStyle.Fixed32);
|
Serializer.SerializeWithLengthPrefix(m_CachedStream, packet, PrefixStyle.Fixed32);
|
||||||
MemoryPool.Release((IMemory)packet);
|
MemoryPool.Release((IMemory)packet);
|
||||||
m_CachedStream.WriteTo(destination);
|
m_CachedStream.WriteTo(destination);
|
||||||
@@ -84,21 +81,12 @@ namespace TEngine.Runtime
|
|||||||
/// <param name="source">要反序列化的来源流。</param>
|
/// <param name="source">要反序列化的来源流。</param>
|
||||||
/// <param name="customErrorData">用户自定义错误数据。</param>
|
/// <param name="customErrorData">用户自定义错误数据。</param>
|
||||||
/// <returns>反序列化后的消息包。</returns>
|
/// <returns>反序列化后的消息包。</returns>
|
||||||
public MainPack DeserializePacket(IPacketHeader packetHeader, Stream source, out object customErrorData)
|
public MainPack DeserializePacket(Stream source, out object customErrorData)
|
||||||
{
|
{
|
||||||
// 注意:此函数并不在主线程调用!
|
// 注意:此函数并不在主线程调用!
|
||||||
customErrorData = null;
|
customErrorData = null;
|
||||||
|
|
||||||
CSPacketHeader csPacketHeader = packetHeader as CSPacketHeader;
|
|
||||||
if (csPacketHeader == null)
|
|
||||||
{
|
|
||||||
Log.Warning("Packet header is invalid.");
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
MainPack packet = null;
|
MainPack packet = null;
|
||||||
if (csPacketHeader.IsValid)
|
|
||||||
{
|
|
||||||
Type packetType = typeof(MainPack);
|
Type packetType = typeof(MainPack);
|
||||||
if (packetType != null)
|
if (packetType != null)
|
||||||
{
|
{
|
||||||
@@ -106,25 +94,11 @@ namespace TEngine.Runtime
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Log.Warning("Can not deserialize packet for packet id '{0}'.", csPacketHeader.Id.ToString());
|
Log.Warning("Can not deserialize packet for packet id '{0}'.", packet.actioncode.ToString());
|
||||||
}
|
}
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Log.Warning("Packet header is invalid.");
|
|
||||||
}
|
|
||||||
|
|
||||||
MemoryPool.Release(csPacketHeader);
|
|
||||||
return packet;
|
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>
|
||||||
/// 关闭并清理网络频道辅助器。
|
/// 关闭并清理网络频道辅助器。
|
||||||
/// </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;
|
m_ReceiveState.Stream.Position = 0L;
|
||||||
|
|
||||||
bool processSuccess = false;
|
bool processSuccess = false;
|
||||||
if (m_ReceiveState.PacketHeader != null)
|
|
||||||
{
|
|
||||||
processSuccess = ProcessPacket();
|
processSuccess = ProcessPacket();
|
||||||
m_ReceivedPacketCount++;
|
m_ReceivedPacketCount++;
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
processSuccess = ProcessPacketHeader();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (processSuccess)
|
if (processSuccess)
|
||||||
{
|
{
|
||||||
|
@@ -227,15 +227,8 @@ namespace TEngine.Runtime
|
|||||||
m_ReceiveState.Stream.Position = 0L;
|
m_ReceiveState.Stream.Position = 0L;
|
||||||
|
|
||||||
bool processSuccess = false;
|
bool processSuccess = false;
|
||||||
if (m_ReceiveState.PacketHeader != null)
|
|
||||||
{
|
|
||||||
processSuccess = ProcessPacket();
|
processSuccess = ProcessPacket();
|
||||||
m_ReceivedPacketCount++;
|
m_ReceivedPacketCount++;
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
processSuccess = ProcessPacketHeader();
|
|
||||||
}
|
|
||||||
|
|
||||||
return processSuccess;
|
return processSuccess;
|
||||||
}
|
}
|
||||||
|
@@ -253,15 +253,8 @@ namespace TEngine.Runtime
|
|||||||
m_ReceiveState.Stream.Position = 0L;
|
m_ReceiveState.Stream.Position = 0L;
|
||||||
|
|
||||||
bool processSuccess = false;
|
bool processSuccess = false;
|
||||||
if (m_ReceiveState.PacketHeader != null)
|
|
||||||
{
|
|
||||||
processSuccess = ProcessPacket();
|
processSuccess = ProcessPacket();
|
||||||
m_ReceivedPacketCount++;
|
m_ReceivedPacketCount++;
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
processSuccess = ProcessPacketHeader();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (processSuccess)
|
if (processSuccess)
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user