mirror of
https://github.com/chylex/Minecraft-Phantom-Panel.git
synced 2025-08-16 21:31:45 +02:00
.config
.run
.workdir
Agent
Common
Docker
Server
Utils
Phantom.Utils.Collections
Phantom.Utils.Collections.Tests
Phantom.Utils.Cryptography
Phantom.Utils.Events
Phantom.Utils.IO
Phantom.Utils.Rpc
Message
IMessage.cs
MessageRegistry.cs
MessageSerializer.cs
Phantom.Utils.Rpc.csproj
RpcConfiguration.cs
RpcRuntime.cs
Phantom.Utils.Runtime
Phantom.Utils.Runtime.Tests
.gitattributes
.gitignore
AddMigration.bat
AddMigration.sh
PhantomPanel.sln
global.json
35 lines
1.4 KiB
C#
35 lines
1.4 KiB
C#
using System.Buffers.Binary;
|
|
using MessagePack;
|
|
using MessagePack.Resolvers;
|
|
|
|
namespace Phantom.Utils.Rpc.Message;
|
|
|
|
static class MessageSerializer {
|
|
private static readonly MessagePackSerializerOptions SerializerOptions =
|
|
MessagePackSerializerOptions
|
|
.Standard
|
|
.WithResolver(CompositeResolver.Create(NativeGuidResolver.Instance, StandardResolver.Instance))
|
|
.WithCompression(MessagePackCompression.None)
|
|
.WithSecurity(MessagePackSecurity.UntrustedData.WithMaximumObjectGraphDepth(10));
|
|
|
|
public static void Serialize<TMessage, TListener>(Stream stream, TMessage message, CancellationToken cancellationToken) where TMessage : IMessage<TListener> {
|
|
MessagePackSerializer.Serialize(stream, message, SerializerOptions, cancellationToken);
|
|
}
|
|
|
|
public static Func<ReadOnlyMemory<byte>, CancellationToken, TMessageBase> Deserialize<TMessage, TMessageBase, TListener>() where TMessageBase : IMessage<TListener> where TMessage : TMessageBase {
|
|
return static (memory, cancellationToken) => MessagePackSerializer.Deserialize<TMessage>(memory, SerializerOptions, cancellationToken);
|
|
}
|
|
|
|
public static void WriteCode(Stream stream, ushort value) {
|
|
Span<byte> buffer = stackalloc byte[2];
|
|
BinaryPrimitives.WriteUInt16LittleEndian(buffer, value);
|
|
stream.Write(buffer);
|
|
}
|
|
|
|
public static ushort ReadCode(ref ReadOnlyMemory<byte> memory) {
|
|
ushort value = BinaryPrimitives.ReadUInt16LittleEndian(memory.Span);
|
|
memory = memory[2..];
|
|
return value;
|
|
}
|
|
}
|