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