5 // Created by Hori,Masaki on 2017/02/02.
6 // Copyright © 2017年 Hori,Masaki. All rights reserved.
11 final class JSONReciever {
13 init(queue: Queue<APIResponse>) {
16 CustomHTTPProtocol.classDelegate = self
19 private let queue: Queue<APIResponse>
20 private var recievers: [URLProtocol: NSMutableData] = [:]
23 extension JSONReciever: CustomHTTPProtocolDelegate {
25 private func acceptProtocol(_ proto: URLProtocol) {
27 recievers[proto] = NSMutableData()
29 Debug.print("Accept protorol ->", proto, level: .full)
32 private func data(_ forProtocol: URLProtocol) -> NSMutableData? {
34 return recievers[forProtocol]
37 private func clearProtocol(_ proto: URLProtocol) {
39 recievers[proto] = nil
42 func customHTTPProtocol(_ proto: CustomHTTPProtocol, didRecieve response: URLResponse) {
44 if let pathComp = proto.request.url?.pathComponents,
45 pathComp.contains("kcsapi") {
51 func customHTTPProtocol(_ proto: CustomHTTPProtocol, didRecieve data: Data) {
53 self.data(proto)?.append(data)
56 func customHTTPProtocolDidFinishLoading(_ proto: CustomHTTPProtocol) {
58 defer { clearProtocol(proto) }
60 guard let data = self.data(proto),
61 let response = APIResponse(request: proto.request, data: data as Data) else {
66 queue.enqueue(response)
69 func customHTTPProtocol(_ proto: CustomHTTPProtocol, didFailWithError error: Error) {
71 Debug.print("Connection Error! \nRequest: \(proto.request)\nError:\(error)", level: .full)