Mercurial > hg > Database > Christie-sharp
changeset 40:7276e3429c99
fix NetworkStream Error
author | riono <e165729@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 25 May 2021 03:02:38 +0900 |
parents | 9217d14cc220 |
children | 0cd765be9693 |
files | Christie_net.csproj daemon/IncomingTcpConnection.cs datagear/RemoteMessage.cs datagear/command/Command.cs datagear/command/PutCommand.cs datagear/dg/MessagePackDataGear.cs |
diffstat | 6 files changed, 37 insertions(+), 46 deletions(-) [+] |
line wrap: on
line diff
--- 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 @@ <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>netcoreapp3.1</TargetFramework> - <StartupObject>Christie_net.Test.Example.FizzBuzz.StartFizzBuzz</StartupObject> + <StartupObject>Christie_net.Test.Example.RemoteTake.StartRemoteTake</StartupObject> </PropertyGroup> <ItemGroup>
--- 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<RemoteMessage>(remoteMessageData); - CommandType type = CommandTypeExt.GetCommandTypeFormId(msg.type); - - Console.WriteLine("stream pos;" + memoryData.Position); // Debug //Console.WriteLine("length: " + dataLength); - // old code - // RemoteMessage msg = - // MessagePackSerializer.Deserialize<RemoteMessage>(streamData); - + RemoteMessage msg = MessagePackSerializer.Deserialize<RemoteMessage>(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<int>(deserializeCommand)]; //connection.socket.Receive(data); - lengthData = new byte[100]; - memoryData.Read(lengthData, 0, Marshal.SizeOf(typeof(int))); - length = MessagePackSerializer.Deserialize<int>(lengthData); - data = new byte[length]; + data = msg.data; - memoryData.Read(data, 0, length); - try { MessagePackDataGear<object> dg = new MessagePackDataGear<object>(data, Type.GetType(msg.clazz)); @@ -83,8 +69,9 @@ // Debug // Type t = Type.GetType(msg.clazz); // object obj = MessagePackSerializer.Deserialize<object>(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<int>(lengthData); - data = new byte[length]; - - memoryData.Read(data, 0, length); + data = msg.data; // data = new byte[MessagePackSerializer.Deserialize<int>(streamData)]; // connection.socket.Receive(data);
--- 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
--- 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) {
--- 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<object>(dg.GetData()).GetMessagePack(); + // byte[] dataSize = MessagePackSerializer.Serialize(data.Length); + // + // stream.Write(command); + // stream.Write(dataSize); + // stream.Write(data); + byte[] data = new MessagePackDataGear<object>(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<RemoteMessage>(command); //Console.WriteLine("***type:" + ms.type + " key:" + ms.key + " fromDgm:" + ms.fromDmgName + " class:" + ms.clazz +" data: null"); - //MessagePackSerializer.Deserialize<object>(ms.data) + // RTCommand cmd = (RTCommand) MessagePackSerializer.Deserialize<object>(data); + // Console.WriteLine("data:" + cmd.line); stream.Write(command);
--- 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;