mirror of
https://github.com/Alex-Rachel/TEngine.git
synced 2025-08-14 16:51:28 +00:00
1.替换了KCP为C#版本 2.KCP增加了Memery<T>支持。 3.框架增加了对Memery<T>的支持,服务器网络消息采用Memery<T>,性能得大幅度的提升 4.优化了消息调度执行逻辑
1.替换了KCP为C#版本 2.KCP增加了Memery<T>支持。 3.框架增加了对Memery<T>的支持,服务器网络消息采用Memery<T>,性能得大幅度的提升 4.优化了消息调度执行逻辑
This commit is contained in:
@@ -1,38 +1,89 @@
|
||||
using System;
|
||||
using System.Buffers;
|
||||
using System.IO;
|
||||
using System.Reflection;
|
||||
using ProtoBuf;
|
||||
#pragma warning disable CS8604
|
||||
using ProtoBuf.Meta;
|
||||
|
||||
namespace TEngine.Core
|
||||
{
|
||||
public static class ProtoBufHelper
|
||||
{
|
||||
public static object FromSpan(Type type, Span<byte> span)
|
||||
{
|
||||
#if TENGINE_UNITY
|
||||
using var recyclableMemoryStream = MemoryStreamHelper.GetRecyclableMemoryStream();
|
||||
recyclableMemoryStream.Write(span);
|
||||
recyclableMemoryStream.Seek(0, SeekOrigin.Begin);
|
||||
return Serializer.Deserialize(type, recyclableMemoryStream);
|
||||
#else
|
||||
return RuntimeTypeModel.Default.Deserialize(type, span);
|
||||
#endif
|
||||
}
|
||||
|
||||
public static object FromMemory(Type type, Memory<byte> memory)
|
||||
{
|
||||
#if TENGINE_UNITY
|
||||
using var recyclableMemoryStream = MemoryStreamHelper.GetRecyclableMemoryStream();
|
||||
recyclableMemoryStream.Write(memory.Span);
|
||||
recyclableMemoryStream.Seek(0, SeekOrigin.Begin);
|
||||
return Serializer.Deserialize(type, recyclableMemoryStream);
|
||||
#else
|
||||
return RuntimeTypeModel.Default.Deserialize(type, memory);
|
||||
#endif
|
||||
}
|
||||
|
||||
public static object FromBytes(Type type, byte[] bytes, int index, int count)
|
||||
{
|
||||
using var stream = new MemoryStream(bytes, index, count);
|
||||
#if TENGINE_UNITY
|
||||
using var stream = MemoryStreamHelper.GetRecyclableMemoryStream();
|
||||
stream.Write(bytes, index, count);
|
||||
stream.Seek(0, SeekOrigin.Begin);
|
||||
return Serializer.Deserialize(type, stream);
|
||||
#else
|
||||
var memory = new Memory<byte>(bytes, index, count);
|
||||
return RuntimeTypeModel.Default.Deserialize(type, memory);
|
||||
#endif
|
||||
}
|
||||
|
||||
public static T FromBytes<T>(byte[] bytes)
|
||||
{
|
||||
using var stream = new MemoryStream(bytes, 0, bytes.Length);
|
||||
#if TENGINE_UNITY
|
||||
using var stream = MemoryStreamHelper.GetRecyclableMemoryStream();
|
||||
stream.Write(bytes, 0, bytes.Length);
|
||||
stream.Seek(0, SeekOrigin.Begin);
|
||||
return Serializer.Deserialize<T>(stream);
|
||||
// return FromBytes<T>(bytes, 0, bytes.Length);
|
||||
#else
|
||||
return Serializer.Deserialize<T>(new Span<byte>(bytes));
|
||||
#endif
|
||||
}
|
||||
|
||||
public static T FromBytes<T>(byte[] bytes, int index, int count)
|
||||
{
|
||||
using var stream = new MemoryStream(bytes, index, count);
|
||||
#if TENGINE_UNITY
|
||||
using var stream = MemoryStreamHelper.GetRecyclableMemoryStream();
|
||||
stream.Write(bytes, 0, bytes.Length);
|
||||
stream.Seek(0, SeekOrigin.Begin);
|
||||
return Serializer.Deserialize<T>(stream);
|
||||
#else
|
||||
return Serializer.Deserialize<T>(new Span<byte>(bytes, index, count));
|
||||
#endif
|
||||
}
|
||||
|
||||
public static byte[] ToBytes(object message)
|
||||
{
|
||||
using var stream = new MemoryStream();
|
||||
using var stream = MemoryStreamHelper.GetRecyclableMemoryStream();
|
||||
Serializer.Serialize(stream, message);
|
||||
return stream.ToArray();
|
||||
}
|
||||
|
||||
public static void ToMemory(object message, Memory<byte> memory)
|
||||
{
|
||||
using var stream = MemoryStreamHelper.GetRecyclableMemoryStream();
|
||||
Serializer.Serialize(stream, message);
|
||||
stream.GetBuffer().AsMemory().CopyTo(memory);
|
||||
}
|
||||
|
||||
public static void ToStream(object message, MemoryStream stream)
|
||||
{
|
||||
Serializer.Serialize(stream, message);
|
||||
@@ -50,8 +101,8 @@ namespace TEngine.Core
|
||||
|
||||
public static T Clone<T>(T t)
|
||||
{
|
||||
var bytes = ToBytes(t);
|
||||
using var stream = new MemoryStream(bytes, 0, bytes.Length);
|
||||
using var stream = MemoryStreamHelper.GetRecyclableMemoryStream();
|
||||
Serializer.Serialize(stream, t);
|
||||
return Serializer.Deserialize<T>(stream);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user