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;