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:
ALEXTANG
2023-07-23 00:25:47 +08:00
parent c96d20a89a
commit 35d2012546
67 changed files with 2447 additions and 1025 deletions

View File

@@ -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);
}
}