2 // CommandRegister.swift
5 // Created by Hori,Masaki on 2017/01/08.
6 // Copyright © 2017年 Hori,Masaki. All rights reserved.
11 enum JSONCommandError: Error {
13 case canNotFindCommand
16 final class CommandRegister {
18 private static var registeredClasses: [JSONCommand.Type] = []
20 class func register() {
22 registerClass(Start2Command.self)
23 registerClass(MemberNDockCommand.self)
24 registerClass(MemberKDockCommand.self)
25 registerClass(MemberDeckCommand.self)
26 registerClass(MemberMaterialCommand.self)
27 registerClass(MemberBasicCommand.self)
28 registerClass(MemberShipCommand.self)
29 registerClass(MemberSlotItemCommand.self)
30 registerClass(MemberShip2Command.self)
31 registerClass(MemberShip3Command.self)
32 registerClass(MemberRequireInfoCommand.self)
33 registerClass(CreateShipCommand.self)
34 registerClass(DestroyItem2Command.self)
35 registerClass(MapStartCommand.self)
36 registerClass(BattleCommand.self)
37 registerClass(GuardShelterCommand.self)
38 registerClass(MapInfoCommand.self)
39 registerClass(SetPlaneCommand.self)
40 registerClass(SetActionCommand.self)
41 registerClass(CreateSlotItemCommand.self)
42 registerClass(GetShipCommand.self)
43 registerClass(DestroyShipCommand.self)
44 registerClass(PowerUpCommand.self)
45 registerClass(RemodelSlotCommand.self)
46 registerClass(ShipDeckCommand.self)
47 registerClass(ChangeHenseiCommand.self)
48 registerClass(KaisouLockCommand.self)
49 registerClass(SlotResetCommand.self)
50 registerClass(CombinedCommand.self)
51 registerClass(SlotDepriveCommand.self)
52 registerClass(QuestListCommand.self)
53 registerClass(ClearItemGetComand.self)
54 registerClass(NyukyoStartCommand.self)
55 registerClass(HokyuChargeCommand.self)
56 registerClass(NyukyoSpeedChangeCommand.self)
57 registerClass(PortCommand.self)
58 registerClass(AirCorpsSupplyCommand.self)
59 registerClass(AirCorpsChangeNameCommand.self)
62 class func command(for response: APIResponse) -> JSONCommand {
64 func concreteCommand(for response: APIResponse) -> JSONCommand {
66 if !response.success {
68 return FailedCommand(apiResponse: response)
71 if IgnoreCommand.canExecuteAPI(response.api) {
73 return IgnoreCommand(apiResponse: response)
76 if let c = registeredClasses.first(where: { $0.canExecuteAPI(response.api) }) {
78 return c.init(apiResponse: response)
81 return UnknownComand(apiResponse: response)
86 return JSONViewCommand(apiResponse: response, command: concreteCommand(for: response))
90 return concreteCommand(for: response)
95 class func registerClass(_ commandClass: JSONCommand.Type) {
97 if registeredClasses.contains(where: { $0 == commandClass }) {
102 registeredClasses.append(commandClass)