changeset 46:41aae40a611c

bug fix
author riono <e165729@ie.u-ryukyu.ac.jp>
date Fri, 07 Jan 2022 19:38:49 +0900
parents 98ee1ee1efb7
children 61ec3dd0995c
files Test/Example/FizzBuzz/Counter.cs Test/Example/FizzBuzz/FizzBuzz.cs Test/Example/FizzBuzz/StartFizzBuzz.cs Test/Example/RemoteTake/CreateRemoteTakeTest.cs Test/Example/RemoteTake/StartRemoteTake.cs datagear/DataGears.cs datagear/LocalDataGearManager.cs datagear/WaitList.cs datagear/dg/MessagePackDataGear.cs
diffstat 9 files changed, 54 insertions(+), 25 deletions(-) [+]
line wrap: on
line diff
--- a/Test/Example/FizzBuzz/Counter.cs	Tue Nov 30 19:34:24 2021 +0900
+++ b/Test/Example/FizzBuzz/Counter.cs	Fri Jan 07 19:38:49 2022 +0900
@@ -1,17 +1,17 @@
 using System;
+using System.Threading;
 using Christie_net.annotation;
 using Christie_net.codegear;
 
 namespace Christie_net.Test.Example.FizzBuzz {
 public class Counter: CodeGear {
-    [Take] private int num;
+    [Take] private int cunt;
     
     public override void Run(CodeGearManager cgm) {
-        Console.WriteLine("call");
-        if (num <= 100) {
-            GetDgm("FizzBuzz").Put("num", num);
-            cgm.GetLocalDGM().Put("num", num+1);
-            Console.WriteLine("num;" + num);
+        if (cunt <= 100) {
+            Console.WriteLine("cunt;" + cunt);
+            GetDgm("FizzBuzz").Put("num", cunt);
+            cgm.GetLocalDGM().Put("cunt", cunt+1);
             cgm.Setup(new Counter());
         } else {
             GetDgm("FizzBuzz").Put("num", -1);
--- a/Test/Example/FizzBuzz/FizzBuzz.cs	Tue Nov 30 19:34:24 2021 +0900
+++ b/Test/Example/FizzBuzz/FizzBuzz.cs	Fri Jan 07 19:38:49 2022 +0900
@@ -13,6 +13,8 @@
             Console.WriteLine(num + ":Fizz");
         }else if (num % 5 == 0) {
             Console.WriteLine(num + ":Buzz");
+        }else if(num < 0) {
+            cgm.GetLocalDGM().Finish();
         } else {
             Console.WriteLine(num);
         }
--- a/Test/Example/FizzBuzz/StartFizzBuzz.cs	Tue Nov 30 19:34:24 2021 +0900
+++ b/Test/Example/FizzBuzz/StartFizzBuzz.cs	Fri Jan 07 19:38:49 2022 +0900
@@ -4,7 +4,7 @@
 
 namespace Christie_net.Test.Example.FizzBuzz {
 public class StartFizzBuzz : StartCodeGear {
-    [Take] private int i = 1;
+    //[Take] private int i = 1;
     
     public StartFizzBuzz(CodeGearManager cgm) : base(cgm) { }
 
@@ -14,7 +14,7 @@
         counter.Setup(new Counter());
         fizzbuzz.Setup(new FizzBuzz());
         counter.CreateRemoteDGM("FizzBuzz", "localhost", 10002);
-        counter.GetLocalDGM().Put("num", 1);
+        counter.GetLocalDGM().Put("cunt", 3);
     }
 }
 }
\ No newline at end of file
--- a/Test/Example/RemoteTake/CreateRemoteTakeTest.cs	Tue Nov 30 19:34:24 2021 +0900
+++ b/Test/Example/RemoteTake/CreateRemoteTakeTest.cs	Fri Jan 07 19:38:49 2022 +0900
@@ -4,9 +4,9 @@
 
 namespace Christie_net.Test.Example.RemoteTake {
 public class CreateRemoteTakeTest : CodeGear {
+    //[Take] public RTCommand command;
     [Take] public RTCommand command;
 
-
     public override void Run(CodeGearManager cgm) {
         Console.WriteLine(command);
         cgm.GetLocalDGM().Put("finish" , "end");
--- a/Test/Example/RemoteTake/StartRemoteTake.cs	Tue Nov 30 19:34:24 2021 +0900
+++ b/Test/Example/RemoteTake/StartRemoteTake.cs	Fri Jan 07 19:38:49 2022 +0900
@@ -1,3 +1,4 @@
+using System;
 using System.Threading;
 using Christie_net.codegear;
 
@@ -11,10 +12,10 @@
         cgm.Setup(new CreateRemoteTakeTest());
         cgm.Setup(new FinishRemoteTake());
         RTCommand cmd = new RTCommand("insert", "line", 0);
-        
+
         cgm.GetDGM("remote").Put("command", cmd);
         
-        Thread.Sleep(9999);
+        //Thread.Sleep(9999);
     }
     
 }
--- a/datagear/DataGears.cs	Tue Nov 30 19:34:24 2021 +0900
+++ b/datagear/DataGears.cs	Fri Jan 07 19:38:49 2022 +0900
@@ -25,6 +25,8 @@
                 var queue = new BlockingCollection<DataGear<object>>();
                 queue.TryAdd(dg);
                 dataGears.Add(key, queue);
+                
+                //Console.WriteLine("dict:" + dataGears.Count + " queue:" + dataGears[key].Count);
             }
         }
     }
@@ -39,15 +41,24 @@
             object data = null;
             // Queueからの取得は参照渡し
             DataGear<object> dataGear;
+            //Console.WriteLine("queue num:" + dataGears.Count);
             if (dataGears[key].TryTake(out dataGear)) {
                 data = dataGear.GetData();
             }
+            
+            //Console.WriteLine("count:" + dataGears[key].Count);
 
             // DataGeraを削除取り出ししたのでkeyも削除
             if (dataGears[key].Count == 0) {
                 dataGears[key].Dispose();
                 dataGears.Remove(key);
             }
+
+            
+            // if (dataGears[key].Count == 0) {
+            //     dataGears[key].Dispose();
+            // }
+            //Console.WriteLine("queue num after:" + dataGears.Count);
             return data;
         }
     }
--- a/datagear/LocalDataGearManager.cs	Tue Nov 30 19:34:24 2021 +0900
+++ b/datagear/LocalDataGearManager.cs	Fri Jan 07 19:38:49 2022 +0900
@@ -26,7 +26,7 @@
     public override void RunCommand(Command cm) {
         switch (cm.type) {
             case CommandType.PUT:
-                //Console.WriteLine("data:" + cm.key + "  dg:"  + cm.dg.GetData().ToString());
+                Console.WriteLine("data:" + cm.key + "  dg:"  + cm.dg.GetData().ToString());
                 dataGears.SetData(cm);
                 if (waitList.ContainsKey(cm.key)) {
                     RunCommand(waitList.GetAndRemoveCommand(cm.key));
--- a/datagear/WaitList.cs	Tue Nov 30 19:34:24 2021 +0900
+++ b/datagear/WaitList.cs	Fri Jan 07 19:38:49 2022 +0900
@@ -1,3 +1,4 @@
+using System;
 using System.Collections;
 using System.Collections.Concurrent;
 using System.Collections.Generic;
@@ -30,6 +31,7 @@
                     waitlist.Remove(key);
                 }
             }
+            Console.WriteLine("cm:" + cm);
             return cm;
         }
     }
--- a/datagear/dg/MessagePackDataGear.cs	Tue Nov 30 19:34:24 2021 +0900
+++ b/datagear/dg/MessagePackDataGear.cs	Fri Jan 07 19:38:49 2022 +0900
@@ -1,5 +1,6 @@
 using System;
 using System.Collections.Generic;
+using System.Diagnostics;
 using Christie_net.Test.Example.RemoteTake;
 using MessagePack;
 
@@ -27,9 +28,9 @@
             // Debug
             // Console.WriteLine("data:" + data);
             // Console.WriteLine();
-            
+
             messagePack = MessagePackSerializer.Serialize(data);
-           
+
             SetDataSize(messagePack.Length);
         } catch (Exception e) {
             Console.WriteLine("\n" + e.ToString());
@@ -45,15 +46,15 @@
                     var dataObj = MessagePackSerializer.Deserialize<T>(messagePack);
 
                     // Debug
-                    //Console.WriteLine("MSP data: " + clazz);
+                    //Console.WriteLine("MSP data: " + dataObj.GetType());
 
                     var convertData = MessagePackDataFormed(dataObj);
-                    
-                    
+
+
                     SetData(convertData);
                 } catch (Exception e) {
                     Console.WriteLine(e.StackTrace);
-                } 
+                }
 
             return base.GetData();
         }
@@ -63,15 +64,27 @@
         this.dataSize = dataSize;
     }
 
+    // If deserialize data is not primitive type, it is dictionary 
     public T MessagePackDataFormed(dynamic deserializedData) {
-        Dictionary<dynamic,dynamic> dataDictionary = (Dictionary<dynamic, dynamic>) deserializedData;
-        List<object> valueArray = new List<object>();
-        foreach (var VARIABLE in dataDictionary) {
-            valueArray.Add(VARIABLE.Value);
+        var type = deserializedData.GetType();
+        //Console.WriteLine(type);
+        T instance;
+        if (type.IsPrimitive || type == typeof(string) || type == typeof(decimal)) {
+            //instance = Activator.CreateInstance(clazz, deserializedData);
+            // var typeInference = deserializedData;
+            instance = Convert.ChangeType(deserializedData, clazz);
+        } else {
+            //Dictionary<dynamic, dynamic> dataDictionary = (Dictionary<dynamic, dynamic>) deserializedData;
+            List<object> valueArray = new List<object>();
+            foreach (var VARIABLE in (dynamic) deserializedData) {
+                Console.WriteLine("val:" + VARIABLE);
+                valueArray.Add(VARIABLE.Value);
+            }
+
+            object[] convertArray = valueArray.ToArray();
+
+            instance = (T) Activator.CreateInstance(clazz, convertArray);
         }
-        object[] convertArray = valueArray.ToArray();
-
-        T instance = (T) Activator.CreateInstance(clazz, convertArray);
         return instance;
     }
 }