OSDN Git Service

2825a3c99c78924fc0e5cc1fc27534aa6f0050fe
[kcd/KCD.git] / KCD / API.swift
1 //
2 //  API.swift
3 //  KCD
4 //
5 //  Created by Hori,Masaki on 2017/12/08.
6 //  Copyright © 2017年 Hori,Masaki. All rights reserved.
7 //
8
9
10 import Foundation
11
12 enum Endpoint: String {
13     
14     case start2 = "/kcsapi/api_start2"
15     case requireInfo = "/kcsapi/api_get_member/require_info"
16     case mapInfo = "/kcsapi/api_get_member/mapinfo"
17     
18     // Port
19     case port = "/kcsapi/api_port/port"
20     
21     // Dock
22     case ndock = "/kcsapi/api_get_member/ndock"
23     case kdock = "/kcsapi/api_get_member/kdock"
24     
25     // Deck
26     case deck = "/kcsapi/api_get_member/deck"
27     case deckPort = "/kcsapi/api_get_member/deck_port"
28     case presetSelect = "/kcsapi/api_req_hensei/preset_select"
29     
30     // Supplies
31     case material = "/kcsapi/api_get_member/material"
32     case basic = "/kcsapi/api_get_member/basic"
33     
34     // Ship
35     case ship = "/kcsapi/api_get_member/ship"
36     case ship2 = "/kcsapi/api_get_member/ship2"
37     case ship3 = "/kcsapi/api_get_member/ship3"
38     case shipDeck = "/kcsapi/api_get_member/ship_deck"
39     
40     case createShip = "/kcsapi/api_req_kousyou/createship"
41     case getShip = "/kcsapi/api_req_kousyou/getship"
42     case destroyShip = "/kcsapi/api_req_kousyou/destroyship"
43     
44     case powerup = "/kcsapi/api_req_kaisou/powerup"
45     
46     case shipLock = "/kcsapi/api_req_kaisou/lock"
47     
48     // SlotItem
49     case slotItem = "/kcsapi/api_get_member/slot_item"
50     
51     case exchangeIndex = "/kcsapi/api_req_kaisou/slot_exchange_index"
52     case slotDeprive = "/kcsapi/api_req_kaisou/slot_deprive"
53     
54     case createItem = "/kcsapi/api_req_kousyou/createitem"
55     case destroyItem2 = "/kcsapi/api_req_kousyou/destroyitem2"
56     
57     case remodelSlot = "/kcsapi/api_req_kousyou/remodel_slot"
58     
59     // Hensei
60     case henseiCombined = "/kcsapi/api_req_hensei/combined"
61     case change = "/kcsapi/api_req_hensei/change"
62     
63     // Nyukyo
64     case startNyukyo = "/kcsapi/api_req_nyukyo/start"
65     case speedChange = "/kcsapi/api_req_nyukyo/speedchange"
66     
67     // Charge
68     case charge = "/kcsapi/api_req_hokyu/charge"
69     
70     // Airbase
71     case setPlane = "/kcsapi/api_req_air_corps/set_plane"
72     case setAction = "/kcsapi/api_req_air_corps/set_action"
73     case airCorpsSupply = "/kcsapi/api_req_air_corps/supply"
74     case airCorpsRename = "/kcsapi/api_req_air_corps/change_name"
75     
76     // Battle
77     case battle = "/kcsapi/api_req_sortie/battle"
78     
79     case combinedBattle = "/kcsapi/api_req_combined_battle/battle"
80     case combinedAirBattle = "/kcsapi/api_req_combined_battle/airbattle"
81     case combinedBattleWater = "/kcsapi/api_req_combined_battle/battle_water"
82     case combinedEcBattle = "/kcsapi/api_req_combined_battle/ec_battle"
83     case combinedEachBattle = "/kcsapi/api_req_combined_battle/each_battle"
84     case combinedEachBattleWater = "/kcsapi/api_req_combined_battle/each_battle_water"
85     
86     case combinedEachNightToDay = "/kcsapi/api_req_combined_battle/ec_night_to_day"
87     
88     case airBattle = "/kcsapi/api_req_sortie/airbattle"
89     case ldAirBattle = "/kcsapi/api_req_sortie/ld_airbattle"
90     case combinedLdAirBattle = "/kcsapi/api_req_combined_battle/ld_airbattle"
91     
92     case midnightBattle = "/kcsapi/api_req_battle_midnight/battle"
93     case midnightSpMidnight = "/kcsapi/api_req_battle_midnight/sp_midnight"
94     case combinedEcMidnightBattle = "/kcsapi/api_req_combined_battle/ec_midnight_battle"
95     case combinedMidnightBattle = "/kcsapi/api_req_combined_battle/midnight_battle"
96     case combinedSpMidnight = "/kcsapi/api_req_combined_battle/sp_midnight"
97     
98     case battleResult = "/kcsapi/api_req_sortie/battleresult"
99     case combinedBattleResult = "/kcsapi/api_req_combined_battle/battleresult"
100     
101     // GuardEscape
102     case goback = "/kcsapi/api_req_combined_battle/goback_port"
103     case gobakAlone = "/kcsapi/api_req_sortie/goback_port"
104     
105     // Map
106     case start = "/kcsapi/api_req_map/start"
107     case next = "/kcsapi/api_req_map/next"
108     
109     //Quest
110     case questList = "/kcsapi/api_get_member/questlist"
111     case clearItemGet = "/kcsapi/api_req_quest/clearitemget"
112     
113     // Unknown
114     case unknown = "UNKNOWN_API_STRING"
115 }
116
117 enum APIType {
118     
119     case port
120     
121     case deck
122     
123     case battle
124     
125     case battleResult
126     
127     case guardEscape
128     
129     case map
130     
131     case other
132 }
133
134 private func apiType(of endpoint: Endpoint) -> APIType {
135     
136     switch endpoint {
137         
138     case .port:
139         return .port
140         
141     case .deck, .deckPort, .presetSelect:
142         return .deck
143         
144     case .battle,
145          .combinedBattle, .combinedAirBattle, .combinedBattleWater,
146          .combinedEcBattle, .combinedEachBattle, .combinedEachBattleWater,
147          .combinedEachNightToDay,
148          .airBattle, .ldAirBattle, .combinedLdAirBattle,
149          .midnightBattle, .midnightSpMidnight,
150          .combinedMidnightBattle, .combinedEcMidnightBattle, .combinedSpMidnight:
151         return .battle
152         
153     case .battleResult, .combinedBattleResult:
154         return .battleResult
155         
156     case .goback, .gobakAlone:
157         return .guardEscape
158         
159     case .start, .next:
160         return .map
161         
162     default:
163         return .other
164     }
165 }
166
167 struct API {
168     
169     let endpoint: Endpoint
170     
171     var type: APIType {
172         
173         return apiType(of: endpoint)
174     }
175     
176     private var endpointString: String {
177         
178         switch endpoint {
179         case .unknown: return rawEndpointString ?? "Not Recorded"
180         default: return endpoint.rawValue
181         }
182     }
183     
184     private var rawEndpointString: String?
185     
186     init(endpointPath rawValue: String) {
187         
188         endpoint = Endpoint(rawValue: rawValue) ?? .unknown
189         
190         if endpoint == .unknown {
191             
192             rawEndpointString = rawValue
193         }
194     }
195     
196     func includs(in rawValues: [String]) -> Bool {
197         
198         return rawValues.contains(endpointString)
199     }
200     
201     func isRanking() -> Bool {
202         
203         return endpointString.hasPrefix("/kcsapi/api_req_ranking/")
204     }
205 }
206
207 extension API: CustomStringConvertible {
208     
209     var description: String {
210         
211         return "API: \(endpointString)"
212     }
213 }
214
215 extension API: CustomDebugStringConvertible {
216     
217     var debugDescription: String {
218         
219         return endpointString
220     }
221 }