import Cocoa
-class SetPlaneCommand: JSONCommand {
- override class func canExecuteAPI(_ api: String) -> Bool {
- if api == "/kcsapi/api_req_air_corps/set_plane" { return true }
- return false
+final class SetPlaneCommand: JSONCommand {
+
+ override class func canExecuteAPI(_ api: API) -> Bool {
+
+ return api.endpoint == .setPlane
}
override func execute() {
+
guard let areaId = parameter["api_area_id"].int,
let rId = parameter["api_base_id"].int,
- let squadronId = parameter["api_squadron_id"].int
- else { return print("Argument is wrong") }
- guard let distance = data["api_distance"].int,
- let bauxite = data["api_after_bauxite"].int
- else { return print("JSON is wrong") }
- let planInfo = data["api_plane_info"][0]
- guard let cond = planInfo["api_cond"].int,
- let slotid = planInfo["api_slotid"].int,
- let state = planInfo["api_state"].int,
- let count = planInfo["api_count"].int,
- let maxCount = planInfo["api_max_count"].int
- else { return print("api_plane_info is wrong") }
+ let squadronId = parameter["api_squadron_id"].int else {
+
+ Logger.shared.log("SetPlaneCommand: Argument is wrong")
+
+ return
+ }
+ guard let distance = data["api_distance"].int else {
+
+ Logger.shared.log("SetPlaneCommand: JSON is wrong")
+
+ return
+ }
- let store = ServerDataStore.oneTimeEditor()
- guard let airbase = store.airBase(area: areaId, base: rId)
- else { return print("AirBase is not found") }
- let planes = airbase.planeInfo
- guard planes.count >= squadronId,
- let plane = planes[squadronId - 1] as? AirBasePlaneInfo
- else { return print("AirBase is wrong") }
- plane.cond = cond
- plane.slotid = slotid
- plane.state = state
- plane.count = count
- plane.max_count = maxCount
+ let planInfo = data["api_plane_info"][0]
- airbase.distance = distance
+ guard let slotid = planInfo["api_slotid"].int,
+ let state = planInfo["api_state"].int else {
+
+ Logger.shared.log("api_plane_info is wrong")
+
+ return
+ }
- store.material()?.bauxite = bauxite
+ let store = ServerDataStore.oneTimeEditor()
+ store.sync {
+
+ guard let airbase = store.airBase(area: areaId, base: rId) else {
+
+ Logger.shared.log("AirBase is not found")
+
+ return
+ }
+
+ let planes = airbase.planeInfo
+
+ guard planes.count >= squadronId,
+ let plane = planes[squadronId - 1] as? AirBasePlaneInfo else {
+
+ Logger.shared.log("AirBase is wrong")
+
+ return
+ }
+
+ // TODO: state が 2 の時のみ cond, count, max_count がnilであることを許すようにする
+ plane.cond = planInfo["api_cond"].int ?? 0
+ plane.slotid = slotid
+ plane.state = state
+ plane.count = planInfo["api_count"].int ?? 0
+ plane.max_count = planInfo["api_max_count"].int ?? 0
+
+ airbase.distance = distance
+
+ self.data["api_after_bauxite"].int.map { store.material()?.bauxite = $0 }
+ }
}
}