\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
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
_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
}\r
}\r
\r
- public void CleanupResult()\r
+ private void CleanupResult()\r
{\r
_friend = null;\r
_lastCell = false;\r
\r
namespace KancolleSniffer.Model\r
{\r
- public class CellInfo\r
+ public class CellInfo : Sniffer.IPort\r
{\r
private int _battleCount;\r
\r
\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
_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
\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
_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
\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
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
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
_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