61 lines
1.4 KiB
C#
61 lines
1.4 KiB
C#
using System;
|
|
using System.IO;
|
|
using ProtoBuf.Meta;
|
|
|
|
namespace Guru
|
|
{
|
|
public interface ISupportInitialize
|
|
{
|
|
void BeginInit();
|
|
void EndInit();
|
|
}
|
|
|
|
public interface IDisposable
|
|
{
|
|
void Dispose();
|
|
}
|
|
|
|
public static class ProtobufHelper
|
|
{
|
|
public static void Init()
|
|
{
|
|
}
|
|
|
|
public static object FromBytes(Type type, byte[] bytes, int index, int count)
|
|
{
|
|
using (MemoryStream stream = new MemoryStream(bytes, index, count))
|
|
{
|
|
object o = RuntimeTypeModel.Default.Deserialize(stream, null, type);
|
|
if (o is ISupportInitialize supportInitialize)
|
|
{
|
|
supportInitialize.EndInit();
|
|
}
|
|
return o;
|
|
}
|
|
}
|
|
|
|
public static byte[] ToBytes(object message)
|
|
{
|
|
using (MemoryStream stream = new MemoryStream())
|
|
{
|
|
ProtoBuf.Serializer.Serialize(stream, message);
|
|
return stream.ToArray();
|
|
}
|
|
}
|
|
|
|
public static void ToStream(object message, MemoryStream stream)
|
|
{
|
|
ProtoBuf.Serializer.Serialize(stream, message);
|
|
}
|
|
|
|
public static object FromStream(Type type, MemoryStream stream)
|
|
{
|
|
object o = RuntimeTypeModel.Default.Deserialize(stream, null, type);
|
|
if (o is ISupportInitialize supportInitialize)
|
|
{
|
|
supportInitialize.EndInit();
|
|
}
|
|
return o;
|
|
}
|
|
}
|
|
} |