# HG changeset patch # User riono # Date 1621879358 -32400 # Node ID 7276e3429c992ddadf9d02a835f40b8dbc6f7922 # Parent 9217d14cc220826dd9faffbcf34901c60ae5d931 fix NetworkStream Error diff -r 9217d14cc220 -r 7276e3429c99 Christie_net.csproj --- a/Christie_net.csproj Tue May 25 02:35:52 2021 +0900 +++ b/Christie_net.csproj Tue May 25 03:02:38 2021 +0900 @@ -3,7 +3,7 @@ Exe netcoreapp3.1 - Christie_net.Test.Example.FizzBuzz.StartFizzBuzz + Christie_net.Test.Example.RemoteTake.StartRemoteTake diff -r 9217d14cc220 -r 7276e3429c99 daemon/IncomingTcpConnection.cs --- a/daemon/IncomingTcpConnection.cs Tue May 25 02:35:52 2021 +0900 +++ b/daemon/IncomingTcpConnection.cs Tue May 25 03:02:38 2021 +0900 @@ -6,6 +6,7 @@ using Christie_net.datagear; using Christie_net.datagear.command; using Christie_net.datagear.dg; +using Christie_net.Test.Example.RemoteTake; using MessagePack; using Microsoft.VisualBasic; using CommandType = Christie_net.datagear.command.CommandType; @@ -29,53 +30,38 @@ public void Run() { //TODO: Data長がわからないので1024で仮置き → ぴったしで読み込む必要がある byte[] streamData = new byte[1024]; - MemoryStream memoryData = null; + try { connection.stream.Read(streamData); - memoryData = new MemoryStream(streamData); } catch (Exception e) { Console.WriteLine(e); } - if (memoryData == null) { - return; - } + // if (memoryData == null) { + // return; + // } while (true) { try { // データはRemotemessage(Command), length, dataの順で入っている //int dataLength = connection.socket.Receive(deserializeCommand); - byte[] remoteMessageData = new byte[100]; - memoryData.Read(remoteMessageData, 0, (int) Marshal.SizeOf(typeof(RemoteMessage))); - RemoteMessage msg = MessagePackSerializer.Deserialize(remoteMessageData); - CommandType type = CommandTypeExt.GetCommandTypeFormId(msg.type); - - Console.WriteLine("stream pos;" + memoryData.Position); // Debug //Console.WriteLine("length: " + dataLength); - // old code - // RemoteMessage msg = - // MessagePackSerializer.Deserialize(streamData); - + RemoteMessage msg = MessagePackSerializer.Deserialize(streamData); + CommandType type = CommandTypeExt.GetCommandTypeFormId(msg.type); + // Debug //Console.WriteLine("incoming:" + msg.type); byte[] data; - byte[] lengthData; - int length; - + switch (type) { case CommandType.PUT: //data = new byte[MessagePackSerializer.Deserialize(deserializeCommand)]; //connection.socket.Receive(data); - lengthData = new byte[100]; - memoryData.Read(lengthData, 0, Marshal.SizeOf(typeof(int))); - length = MessagePackSerializer.Deserialize(lengthData); - data = new byte[length]; + data = msg.data; - memoryData.Read(data, 0, length); - try { MessagePackDataGear dg = new MessagePackDataGear(data, Type.GetType(msg.clazz)); @@ -83,8 +69,9 @@ // Debug // Type t = Type.GetType(msg.clazz); // object obj = MessagePackSerializer.Deserialize(msg.data); - Console.WriteLine("***type:" + msg.type + " key:" + msg.key + " fromDgm:" + msg.fromDmgName + " class:" + msg.clazz + " data: null" ); - + // RTCommand cmd = (RTCommand) obj; + Console.WriteLine("***type:" + msg.type + " key:" + msg.key + " fromDgm:" + msg.fromDmgName + " class:" + msg.clazz); + // Console.WriteLine("data :" + cmd.line); cgm.GetLocalDGM().Put(msg.key, dg); } catch (TypeLoadException e) { @@ -106,12 +93,7 @@ break; case CommandType.REPLY: // 待っていたwaitlistに渡してcsにセット - lengthData = new byte[100]; - memoryData.Read(lengthData, 0, Marshal.SizeOf(typeof(int))); - length = MessagePackSerializer.Deserialize(lengthData); - data = new byte[length]; - - memoryData.Read(data, 0, length); + data = msg.data; // data = new byte[MessagePackSerializer.Deserialize(streamData)]; // connection.socket.Receive(data); diff -r 9217d14cc220 -r 7276e3429c99 datagear/RemoteMessage.cs --- a/datagear/RemoteMessage.cs Tue May 25 02:35:52 2021 +0900 +++ b/datagear/RemoteMessage.cs Tue May 25 03:02:38 2021 +0900 @@ -12,14 +12,17 @@ public string key; [Key("clazz")] public string clazz; + [Key("data")] + public byte[] data; public RemoteMessage(){} // for messagePack - public RemoteMessage(int type, string fromDmgName, string key, string clazz) { + public RemoteMessage(int type, string fromDmgName, string key, string clazz, byte[] data) { this.type = type; this.fromDmgName = fromDmgName; this.key = key; this.clazz = clazz; + this.data = data; } } } \ No newline at end of file diff -r 9217d14cc220 -r 7276e3429c99 datagear/command/Command.cs --- a/datagear/command/Command.cs Tue May 25 02:35:52 2021 +0900 +++ b/datagear/command/Command.cs Tue May 25 03:02:38 2021 +0900 @@ -37,8 +37,8 @@ // for remote public abstract byte[] Convert(); - public RemoteMessage CreateRemoteMessage() { - return new RemoteMessage((int) type, fromDgmName, key, clazz.FullName); + public RemoteMessage CreateRemoteMessage(byte[] data) { + return new RemoteMessage((int) type, fromDgmName, key, clazz.FullName, data); } public void SetDg(Object obj) { diff -r 9217d14cc220 -r 7276e3429c99 datagear/command/PutCommand.cs --- a/datagear/command/PutCommand.cs Tue May 25 02:35:52 2021 +0900 +++ b/datagear/command/PutCommand.cs Tue May 25 03:02:38 2021 +0900 @@ -1,6 +1,7 @@ using System; using System.IO; using Christie_net.datagear.dg; +using Christie_net.Test.Example.RemoteTake; using MessagePack; namespace Christie_net.datagear.command { @@ -17,18 +18,22 @@ MemoryStream stream = new MemoryStream(); try { - byte[] command = MessagePackSerializer.Serialize(CreateRemoteMessage()); + // byte[] command = MessagePackSerializer.Serialize(CreateRemoteMessage()); + // byte[] data = new MessagePackDataGear(dg.GetData()).GetMessagePack(); + // byte[] dataSize = MessagePackSerializer.Serialize(data.Length); + // + // stream.Write(command); + // stream.Write(dataSize); + // stream.Write(data); + byte[] data = new MessagePackDataGear(dg.GetData()).GetMessagePack(); - byte[] dataSize = MessagePackSerializer.Serialize(data.Length); - - stream.Write(command); - stream.Write(dataSize); - stream.Write(data); + byte[] command = MessagePackSerializer.Serialize(CreateRemoteMessage(data)); // Debug //var ms = MessagePackSerializer.Deserialize(command); //Console.WriteLine("***type:" + ms.type + " key:" + ms.key + " fromDgm:" + ms.fromDmgName + " class:" + ms.clazz +" data: null"); - //MessagePackSerializer.Deserialize(ms.data) + // RTCommand cmd = (RTCommand) MessagePackSerializer.Deserialize(data); + // Console.WriteLine("data:" + cmd.line); stream.Write(command); diff -r 9217d14cc220 -r 7276e3429c99 datagear/dg/MessagePackDataGear.cs --- a/datagear/dg/MessagePackDataGear.cs Tue May 25 02:35:52 2021 +0900 +++ b/datagear/dg/MessagePackDataGear.cs Tue May 25 03:02:38 2021 +0900 @@ -21,12 +21,13 @@ if (messagePack != null) return messagePack; try { + // Debug + Console.WriteLine("data:" + data.GetType()); messagePack = MessagePackSerializer.Serialize(data); - // Debug - //Console.WriteLine("data:" + data); + SetDataSize(messagePack.Length); } catch (Exception e) { - Console.WriteLine(e.ToString()); + Console.WriteLine("\n" + e.ToString()); } return messagePack;