-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathNetworkManager.swift
97 lines (84 loc) · 3.09 KB
/
NetworkManager.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
//
// NetworkManager.swift
// Breezer
//
// Created by Admin on 27.03.17.
// Copyright © 2017 grapes-studio. All rights reserved.
//
import Foundation
import Alamofire
let strNoInternetConnection = "Нет подключения к сети"
let strOtherError = "Непредвиденная ошибка"
extension ServiceError {
init(json: JSON) {
if let message = json["message"] as? String {
self = .custom(message)
} else {
self = .other
}
}
}
typealias NetworkCompletion = (_ json: JSON?, _ error: Error?) -> Void
public class NetworkManager
{
static let shared = NetworkManager()
fileprivate let reachabilityManager = NetworkReachabilityManager(host: "www.apple.com")
init() {
//start listening network connection
self.reachabilityManager?.startListening()
}
//stoping services
deinit {
self.reachabilityManager?.stopListening()
}
fileprivate func acceptResponse(_ response: DataResponse<Any>?, _ completion: NetworkCompletion)
{
UIApplication.shared.isNetworkActivityIndicatorVisible = false
if let httpResponse = response?.response, (200..<300) ~= httpResponse.statusCode{
completion(response?.result.value as? JSON, nil)
} else {
var error : ServiceError? = nil
if let valueError = (response?.result.value as? JSON).flatMap(ServiceError.init)
{
error = valueError
}
else if let valueError = (response?.result.error) {
error = ServiceError.custom(valueError.localizedDescription)
}
else{
error = ServiceError.other
}
completion(nil, error)
}
}
fileprivate func sendRequest(_ url: URLConvertible,
method: HTTPMethod = .get,
parameters: Parameters? = nil,
encoding: ParameterEncoding = URLEncoding.default,
headers: HTTPHeaders? = nil, completion: @escaping NetworkCompletion)
{
if (reachabilityManager?.isReachable == false)
{
completion(nil, ServiceError.noInternetConnection)
return
}
UIApplication.shared.isNetworkActivityIndicatorVisible = true
Alamofire.request(url, method: method, parameters: parameters, encoding: encoding, headers: headers).responseJSON {
[unowned self] response in
self.acceptResponse(response, completion)
}
}
//send # request
func signInWith(email :String!, password : String!, completion: @escaping NetworkCompletion)
{
//generate parameters
let parameters: JSON = [
"email": email,
"password":password,
"set_cookie":true,
"service":ServiceID
]
UIApplication.shared.isNetworkActivityIndicatorVisible = true
sendRequest(SignInServerURL, method: .post, parameters: parameters, encoding: URLEncoding.queryString, headers: nil, completion: completion)
}
}