using System; using MessagePack; namespace Christie_net.datagear.dg { public class MessagePackDataGear : DataGear { private int dataSize; private byte[] messagePack; private readonly object syncObject = new object(); public MessagePackDataGear(T data) : base(data) { GetMessagePack(); } public MessagePackDataGear(Type clazz) : base(clazz) { } public byte[] GetMessagePack() { if (messagePack != null) return messagePack; try { messagePack = MessagePackSerializer.Serialize(data); SetDataSize(messagePack.Length); } catch (Exception e) { Console.WriteLine(e.StackTrace); } return messagePack; } public T GetData() { lock (syncObject) { if (data == null) try { SetData(MessagePackSerializer.Deserialize(messagePack)); } catch (Exception e) { Console.WriteLine(e.StackTrace); } return base.GetData(); } } public void SetDataSize(int dataSize) { this.dataSize = dataSize; } } }