OSDN Git Service

資材ログに出撃時の資材を記録する
authorKazuhiro Fujieda <fujieda@users.osdn.me>
Sat, 28 May 2016 13:01:13 +0000 (22:01 +0900)
committerKazuhiro Fujieda <fujieda@users.osdn.me>
Sat, 28 May 2016 13:01:13 +0000 (22:01 +0900)
KancolleSniffer.Test/LoggerTest.cs
KancolleSniffer/Logger.cs

index ea8db5f..cf2f301 100644 (file)
@@ -265,6 +265,19 @@ namespace KancolleSniffer.Test
         }\r
 \r
         [TestMethod]\r
+        public void WriteMaterialLogOnSortie()\r
+        {\r
+            var sniffer = new Sniffer();\r
+            var result = "";\r
+            sniffer.SetLogWriter((path, s, h) => { result += s + "|"; }, () => new DateTime(2015, 1, 1));\r
+            sniffer.EnableLog(LogType.Material);\r
+            SnifferTest.SniffLogFile(sniffer, "battle_001");\r
+            PAssert.That(() => "2015-01-01 00:00:00,39636,36912,43064,47519,1329,1424,2030,19|"+\r
+                               "2015-01-01 00:00:00,39636,36912,43064,47519,1329,1424,2030,19|"\r
+                               == result);\r
+        }\r
+\r
+        [TestMethod]\r
         public void InspectCreateItem()\r
         {\r
             var sniffer = new Sniffer();\r
index 586bc92..5df9b58 100644 (file)
@@ -47,7 +47,7 @@ namespace KancolleSniffer
         private dynamic _basic;\r
         private int _kdockId;\r
         private DateTime _prevTime;\r
-        private int[] _currentMaterial;\r
+        private int[] _currentMaterial = new int[Enum.GetValues(typeof(Material)).Length];\r
         private int _materialLogInterval = 10;\r
         private bool _start;\r
 \r
@@ -116,6 +116,8 @@ namespace KancolleSniffer
             _start = true;\r
             _map = json;\r
             _battle = null;\r
+            if ((_logType & LogType.Material) != 0)\r
+                WriteMaterialLog(_nowFunc());\r
         }\r
 \r
         public void InspectMapNext(dynamic json)\r
@@ -334,16 +336,20 @@ namespace KancolleSniffer
         {\r
             if ((_logType & LogType.Material) == 0)\r
                 return;\r
+            foreach (var e in json)\r
+                _currentMaterial[(int)e.api_id - 1] = (int)e.api_value;\r
             var now = _nowFunc();\r
             if (now - _prevTime < TimeSpan.FromMinutes(_materialLogInterval))\r
                 return;\r
+            WriteMaterialLog(now);\r
+        }\r
+\r
+        public void WriteMaterialLog(DateTime now)\r
+        {\r
             _prevTime = now;\r
-            var material = new int[8];\r
-            foreach (var e in json)\r
-                material[(int)e.api_id - 1] = (int)e.api_value;\r
             _writer("資材ログ",\r
                 now.ToString(DateTimeFormat) + "," +\r
-                string.Join(",", material),\r
+                string.Join(",", _currentMaterial),\r
                 "日付,燃料,弾薬,鋼材,ボーキ,高速建造材,高速修復材,開発資材,改修資材");\r
         }\r
 \r