view datagear/dg/MessagePackDataGear.cs @ 40:7276e3429c99

fix NetworkStream Error
author riono <e165729@ie.u-ryukyu.ac.jp>
date Tue, 25 May 2021 03:02:38 +0900
parents 090be804eaa9
children 0cd765be9693
line wrap: on
line source

using System;
using MessagePack;

namespace Christie_net.datagear.dg {
public class MessagePackDataGear<T> : DataGear<T> {
    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 MessagePackDataGear(byte[] messagePack, Type clazz) : base(clazz) {
        this.messagePack = messagePack;
    }

    public byte[] GetMessagePack() {
        if (messagePack != null)
            return messagePack;
        try {
            // Debug
            Console.WriteLine("data:" + data.GetType());
            messagePack = MessagePackSerializer.Serialize(data);
           
            SetDataSize(messagePack.Length);
        } catch (Exception e) {
            Console.WriteLine("\n" + e.ToString());
        }

        return messagePack;
    }

    public override T GetData() {
        lock (syncObject) {
            if (data == null)
                try {
                    var dataObj = MessagePackSerializer.Deserialize<T>(messagePack);
                    ///var dataCast = Convert.ChangeType(dataObj, clazz);
                    SetData(dataObj);
                } catch (Exception e) {
                    Console.WriteLine(e.StackTrace);
                } 

            return base.GetData();
        }
    }

    public void SetDataSize(int dataSize) {
        this.dataSize = dataSize;
    }
}
}