OSDN Git Service

ApiPortを簡素化する
authorKazuhiro Fujieda <fujieda@users.osdn.me>
Sat, 8 Jun 2019 06:50:31 +0000 (15:50 +0900)
committerKazuhiro Fujieda <fujieda@users.osdn.me>
Sat, 8 Jun 2019 07:30:48 +0000 (16:30 +0900)
KancolleSniffer/Model/AkashiTimer.cs
KancolleSniffer/Model/BattleInfo.cs
KancolleSniffer/Model/CellInfo.cs
KancolleSniffer/Model/ConditionTimer.cs
KancolleSniffer/Model/MiscTextInfo.cs
KancolleSniffer/Model/ShipInfo.cs
KancolleSniffer/Sniffer.cs

index 63de2ad..9a3d6ac 100644 (file)
@@ -19,7 +19,7 @@ using KancolleSniffer.Util;
 \r
 namespace KancolleSniffer.Model\r
 {\r
-    public class AkashiTimer\r
+    public class AkashiTimer : Sniffer.IPort\r
     {\r
         private readonly ShipInfo _shipInfo;\r
         private readonly DockInfo _dockInfo;\r
index 4ae3d57..8f3e2fb 100644 (file)
@@ -50,7 +50,7 @@ namespace KancolleSniffer.Model
         public int Interception { get; set; }\r
     }\r
 \r
-    public class BattleInfo\r
+    public class BattleInfo : Sniffer.IPort\r
     {\r
         private readonly ShipInfo _shipInfo;\r
         private readonly ItemInfo _itemInfo;\r
@@ -99,6 +99,12 @@ namespace KancolleSniffer.Model
             _itemInfo = itemInfo;\r
         }\r
 \r
+        public void Port()\r
+        {\r
+            CleanupResult();\r
+            BattleState = BattleState.None;\r
+        }\r
+\r
         public void InspectBattle(string url, string request, dynamic json)\r
         {\r
             SetFormation(json);\r
@@ -234,7 +240,7 @@ namespace KancolleSniffer.Model
             }\r
         }\r
 \r
-        public void CleanupResult()\r
+        private void CleanupResult()\r
         {\r
             _friend = null;\r
             _lastCell = false;\r
index 7cad89c..103cf98 100644 (file)
@@ -14,7 +14,7 @@
 \r
 namespace KancolleSniffer.Model\r
 {\r
-    public class CellInfo\r
+    public class CellInfo : Sniffer.IPort\r
     {\r
         private int _battleCount;\r
 \r
index 89f8242..2f87ed2 100644 (file)
@@ -17,7 +17,7 @@ using System.Linq;
 \r
 namespace KancolleSniffer.Model\r
 {\r
-    public class ConditionTimer : IHaveState\r
+    public class ConditionTimer : IHaveState, Sniffer.IPort\r
     {\r
         private readonly ShipInfo _shipInfo;\r
         private const int Interval = 180;\r
@@ -32,7 +32,12 @@ namespace KancolleSniffer.Model
             _shipInfo = shipInfo;\r
         }\r
 \r
-        public void CalcRegainTime()\r
+        public void Port()\r
+        {\r
+            CalcRegainTime();\r
+        }\r
+\r
+        private void CalcRegainTime()\r
         {\r
             var now = DateTime.Now;\r
             var prevTime = _lastUpdate;\r
index 46bcafb..ddeef25 100644 (file)
@@ -17,7 +17,7 @@ using System.Linq;
 \r
 namespace KancolleSniffer.Model\r
 {\r
-    public class MiscTextInfo\r
+    public class MiscTextInfo : Sniffer.IPort\r
     {\r
         private readonly ShipInfo _shipInfo;\r
         private readonly ItemInfo _itemInfo;\r
index 36be239..df6ce6a 100644 (file)
@@ -76,13 +76,14 @@ namespace KancolleSniffer.Model
             _shipInventory.Clear();\r
         }\r
 \r
+        public void Port(dynamic json)\r
+        {\r
+            HandlePort(json);\r
+        }\r
+\r
         public void InspectShip(string url, dynamic json)\r
         {\r
-            if (url.Contains("port"))\r
-            {\r
-                HandlePort(json);\r
-            }\r
-            else if (url.Contains("ship2"))\r
+            if (url.Contains("ship2"))\r
             {\r
                 SetShipAndDeck(json.api_data, json.api_data_deck);\r
             }\r
@@ -103,7 +104,6 @@ namespace KancolleSniffer.Model
 \r
         private void HandlePort(dynamic json)\r
         {\r
-            _shipInventory.Clear();\r
             for (var i = 0; i < FleetCount; i++)\r
                 _fleets[i].State = FleetState.Port;\r
             SetShipAndDeckForPort(json);\r
@@ -111,10 +111,12 @@ namespace KancolleSniffer.Model
             if (json.api_combined_flag())\r
                 _fleets[0].CombinedType = _fleets[1].CombinedType = (CombinedType)(int)json.api_combined_flag;\r
             VerifyBattleResult();\r
+            ClearBadlyDamagedShips();\r
         }\r
 \r
         private void SetShipAndDeckForPort(dynamic json)\r
         {\r
+            _shipInventory.Clear();\r
             foreach (var entry in json.api_ship)\r
             {\r
                 var ship = (ShipStatus)CreateShipStatus(entry);\r
index 9351955..899e6b3 100644 (file)
@@ -184,19 +184,21 @@ namespace KancolleSniffer
                 MapDictionary[map.api_name] = $"{map.api_maparea_id}-{map.api_no}";\r
         }\r
 \r
+        public interface IPort\r
+        {\r
+            void Port();\r
+        }\r
+\r
         private Update ApiPort(string url, dynamic data)\r
         {\r
             _itemInfo.InspectBasic(data.api_basic);\r
             _materialInfo.InspectMaterialPort(data.api_material);\r
             _logger.InspectBasic(data.api_basic);\r
             _logger.InspectMaterial(data.api_material);\r
-            _shipInfo.InspectShip(url, data);\r
-            _shipInfo.ClearBadlyDamagedShips();\r
-            _conditionTimer.CalcRegainTime();\r
+            _shipInfo.Port(data);\r
             _missionInfo.InspectDeck(data.api_deck_port);\r
             _questCounter.InspectDeck(data.api_deck_port);\r
             _dockInfo.InspectNDock(data.api_ndock);\r
-            _akashiTimer.Port();\r
             _achievement.InspectBasic(data.api_basic);\r
             if (data.api_parallel_quest_count()) // 昔のログにはないので\r
                 _questInfo.AcceptMax = (int)data.api_parallel_quest_count;\r
@@ -204,10 +206,8 @@ namespace KancolleSniffer
                 _airBase.InspectEventObject(data.api_event_object);\r
             if (data.api_plane_info())\r
                 _airBase.InspectPlaneInfo(data.api_plane_info);\r
-            _battleInfo.CleanupResult();\r
-            _battleInfo.BattleState = BattleState.None;\r
-            _miscTextInfo.Port();\r
-            _cellInfo.Port();\r
+            foreach (var receiver in new IPort[]{_conditionTimer, _akashiTimer, _battleInfo, _miscTextInfo, _cellInfo})\r
+                receiver.Port();\r
             SaveState();\r
             RepeatingTimerController?.Resume();\r
             foreach (var s in new[] {"遠征終了", "入渠終了", "疲労回復", "泊地修理", "大破警告"})\r