Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- func request(_ route: EndPoint) -> Promise<Data> {
- return Promise { seal in
- do {
- let request = try self.buildRequest(from: route)
- task = session.dataTask(with: request) { data, response, error in
- Logger.instance?.log(category: .network, message: """
- URL: \(request.url?.absoluteString ?? "-none")
- Method: \(request.httpMethod ?? "-none")
- Body: \((try? JSONSerialization.jsonObject(with: request.httpBody ?? Data(), options: [])) ?? "-none")
- Data: \((try? JSONSerialization.jsonObject(with: data ?? Data(), options: [])) ?? "-none")
- Response code: \(String((response as? HTTPURLResponse)?.statusCode ?? -1234))
- """)
- if let err = error {
- let nserror = err as NSError
- var netResponse: NetworkErrors
- switch nserror.code {
- case NSURLErrorTimedOut:
- netResponse = .timeout
- case NSURLErrorNotConnectedToInternet:
- netResponse = .networkConnection
- default:
- netResponse = .unknow
- }
- return seal.reject(netResponse)
- }
- if let resp = response as? HTTPURLResponse,
- let responseError = self.handleNetworkResponse(resp, data: data),
- responseError != .success {
- switch responseError {
- case .authenticationError:
- NotificationCenter.default.post(name: .needUserRelogin, object: nil)
- seal.reject(responseError)
- case .badRequest(let additionalData):
- guard let code = additionalData?["code"] as? String, let err = self.generateError(for: code) else { seal.reject(responseError); return }
- seal.reject(err)
- default:
- seal.reject(responseError)
- }
- }
- guard let responseData = data else {
- seal.reject(NetworkErrors.noData)
- return
- }
- seal.fulfill(responseData)
- }
- } catch {
- seal.reject(error)
- }
- task?.resume()
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement