view datagear/command/PutCommand.cs @ 69:959096e8786b

fix send data
author riono <e165729@ie.u-ryukyu.ac.jp>
date Wed, 02 Feb 2022 16:39:38 +0900
parents dc3f59937772
children 0f4fa15e5bcb
line wrap: on
line source

using System;
using System.IO;
using Christie_net.datagear.dg;
using MessagePack;
using Microsoft.VisualBasic.CompilerServices;

namespace Christie_net.datagear.command {
public class PutCommand : Command {
    public PutCommand(CommandBuilder cb) : base(cb) {
        this.clazz = dg.GetClazz();
    }
    
    public override void Execute() {
    }

    // commandとdata, dataSizeをMemoryStreamに変換する
    public override byte[] Convert() {
        MemoryStream stream = new MemoryStream();

        try {
            byte[] command = MessagePackSerializer.Serialize(CreateRemoteMessage());
            byte[] commandsize = MessagePackSerializer.Serialize(command.Length);
            
            if (commandsize.Length < 5) {
                byte[] newCommandsize = new byte[5];
                Array.Copy(commandsize, newCommandsize, commandsize.Length);
                commandsize = newCommandsize;
            }

            byte[] data = new MessagePackDataGear<object>(dg.GetData()).GetMessagePack();
            byte[] datasize = MessagePackSerializer.Serialize(data.Length);
            
            if (datasize.Length < 5) {
                byte[] newDatasize = new byte[5];
                Array.Copy(datasize, newDatasize, datasize.Length);
                datasize = newDatasize;
            }

            // Debug
            // RemoteMessage msg = MessagePackSerializer.Deserialize<RemoteMessage>(command);
            // Console.WriteLine("serialize msg:" + msg);
            
            stream.Write(commandsize, 0, commandsize.Length);
            stream.Write(command,0, command.Length);
            stream.Write(datasize, 0, datasize.Length);
            stream.Write(data, 0, data.Length);
        } catch (IOException e) {
            Console.WriteLine(e.StackTrace);
        }
        return stream.ToArray();
    }
}
}