feat(network)!: add v2 framing, pooled buffers and bounded dispatch
Publish UPM package / publish (push) Successful in 2s
Publish NuGet packages / publish (push) Successful in 3m5s

This commit is contained in:
2026-09-29 10:14:47 +08:00
parent c7c45b26f8
commit 93c2b8520b
36 changed files with 752 additions and 398 deletions
@@ -0,0 +1,47 @@
#nullable enable
using System;
using System.Buffers;
using MessagePack;
using MessagePack.Formatters;
namespace ShrinkNetwork.MessagePack
{
/// <summary>Pass a generated-only resolver; register all message types before starting transports.</summary>
public sealed class ShrinkMessagePackNetworkSerializer : ShrinkRegisteredNetworkSerializer
{
private readonly MessagePackSerializerOptions _options;
public ShrinkMessagePackNetworkSerializer(IFormatterResolver generatedResolver)
{
_options = MessagePackSerializerOptions.Standard
.WithResolver(global::MessagePack.Resolvers.CompositeResolver.Create(
generatedResolver ?? throw new ArgumentNullException(nameof(generatedResolver)),
global::MessagePack.Resolvers.BuiltinResolver.Instance))
.WithSecurity(MessagePackSecurity.UntrustedData);
}
public void Register<T>() => Register(new FormatterCodec<T>(_options));
private sealed class FormatterCodec<T> : IShrinkMessageCodec<T>
{
private readonly IMessagePackFormatter<T> _formatter;
private readonly MessagePackSerializerOptions _options;
public FormatterCodec(MessagePackSerializerOptions options)
{
_options = options;
_formatter = options.Resolver.GetFormatter<T>() ?? throw new InvalidOperationException($"No generated MessagePack formatter for {typeof(T).FullName}.");
}
public void Write(IBufferWriter<byte> buffer, T value)
{
var writer = new MessagePackWriter(buffer);
_formatter.Serialize(ref writer, value, _options);
writer.Flush();
}
public T Read(ReadOnlyMemory<byte> payload)
{
var reader = new MessagePackReader(payload);
var result = _formatter.Deserialize(ref reader, _options);
if (!reader.End) throw new System.IO.InvalidDataException("Trailing MessagePack payload.");
return result;
}
}
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: c8394ccb85a14b23b66d1c9ec3a40dc3
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,6 @@
{
"name": "ShrinkNetwork.MessagePack",
"references": ["ShrinkNetwork.Runtime"],
"autoReferenced": true,
"noEngineReferences": true
}
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 74898e5de85247f6b0228c06ee3bdf6e
AssemblyDefinitionImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant: