OSDN Git Service

Timerをクロージャ方式にした
[kcd/KCD.git] / KCD / CreateShipCommand.swift
1 //
2 //  CreateShipCommand.swift
3 //  KCD
4 //
5 //  Created by Hori,Masaki on 2017/01/11.
6 //  Copyright © 2017年 Hori,Masaki. All rights reserved.
7 //
8
9 import Cocoa
10
11 final class CreateShipCommand: JSONCommand {
12     
13     override class func canExecuteAPI(_ api: API) -> Bool {
14         
15         return api.endpoint == .createShip
16     }
17     
18     override func execute() {
19         
20         DispatchQueue.main.asyncAfter(deadline: .now() + 1.5) {
21             
22             self.afterExecute()
23         }
24     }
25     
26     private func afterExecute() {
27         
28         guard let dockId = parameter["api_kdock_id"].int else {
29             
30             Logger.shared.log("api_kdock_id is wrong")
31             
32             return
33         }
34         
35         let store = ServerDataStore.default
36         
37         let storedInfos: KenzoMarkCommand.KenzoDockInfo? = store.sync {
38             
39             guard let kenzoDock = store.kenzoDock(by: dockId)  else {
40                 
41                 return nil
42             }
43             
44             return KenzoMarkCommand.KenzoDockInfo(dockId: kenzoDock.id,
45                                                   shipId: kenzoDock.created_ship_id,
46                                                   fuel: kenzoDock.item1,
47                                                   bull: kenzoDock.item2,
48                                                   steel: kenzoDock.item3,
49                                                   bauxite: kenzoDock.item4,
50                                                   kaihatusizai: kenzoDock.item5)
51         }
52         
53         guard let infos = storedInfos else {
54             
55             Logger.shared.log("Can not load KenzoDeck")
56             
57             return
58         }
59         
60         guard let flagShip = store.sync(execute: { store.deck(by: 1)?[0] }) else {
61             
62             Logger.shared.log("Can not load deck")
63             
64             return
65         }
66         guard let commanderLv = store.sync(execute: { store.basic()?.level }) else {
67             
68             Logger.shared.log("Can not load basic")
69             
70             return
71         }
72         
73         let localStore = LocalDataStore.oneTimeEditor()
74         localStore.sync {
75             
76             guard let newMark = localStore.kenzoMark(byDockId: dockId) ?? localStore.createKenzoMark() else {
77                 
78                 Logger.shared.log("Can not create KenzoMark")
79                 
80                 return
81             }
82             
83             newMark.fuel = infos.fuel
84             newMark.bull = infos.bull
85             newMark.steel = infos.steel
86             newMark.bauxite = infos.bauxite
87             newMark.kaihatusizai = infos.kaihatusizai
88             newMark.created_ship_id = infos.shipId
89             newMark.flagShipName = store.sync { flagShip.name }
90             newMark.flagShipLv = store.sync { flagShip.lv }
91             newMark.commanderLv = commanderLv
92             newMark.kDockId = dockId
93         }
94     }
95 }