// // KMAdvertisementRequestServer.swift // KMAdvertisement // // Created by lizhe on 2022/11/23. // import AFNetworking typealias KMAdvertisementRequestServerCompletion = (_ task: URLSessionDataTask?, _ responseObject: AnyObject?, _ error: Error?) -> Void class KMAdvertisementRequestServer { var sessionManager: AFHTTPSessionManager! static let requestServer = KMAdvertisementRequestServer() init() { let configuration: URLSessionConfiguration = URLSessionConfiguration.default sessionManager = AFHTTPSessionManager.init(sessionConfiguration: configuration) sessionManager.securityPolicy = AFSecurityPolicy.default() } func request(urlString: String, method:String, params: Dictionary?, completion: @escaping KMAdvertisementRequestServerCompletion) -> Void { self.request(urlString: urlString, method: method, params: params, requestSerializer: nil, completion: completion) } func request(urlString: String, method:String, params: Dictionary?, requestSerializer: ((_ requestSerializer:AFHTTPRequestSerializer) -> Void)?, completion: @escaping KMAdvertisementRequestServerCompletion) -> Void { self.request(urlString: urlString, method: method, params: params, requestSerializer: requestSerializer, body: nil, completion: completion) } func request(urlString: String, method:String, params: Dictionary?, requestSerializer: ((_ requestSerializer:AFHTTPRequestSerializer) -> Void)?, body: ((_ formData:AFMultipartFormData) -> Void)?, completion: @escaping KMAdvertisementRequestServerCompletion) -> Void { //每次请求需要重新创建 sessionManager.requestSerializer = AFJSONRequestSerializer() sessionManager.responseSerializer = AFJSONResponseSerializer() sessionManager.responseSerializer.acceptableContentTypes = ["application/json","text/html","text/json","text/javascript","text/plain","image/gif"] sessionManager.requestSerializer.timeoutInterval = 20 if (requestSerializer != nil) { requestSerializer!(sessionManager.requestSerializer); } if (method == "POST") { if (body != nil) { sessionManager.post(urlString, parameters: params, headers: nil) { formData in body!(formData) } progress: { progress in } success: { task, responseObject in let responseObject = responseObject as AnyObject completion(task,responseObject,nil); } failure: { task, error in completion(task,nil,error); } } else { sessionManager.post(urlString, parameters: params, headers: nil) { progress in } success: { task, responseObject in let responseObject = responseObject as AnyObject completion(task,responseObject,nil) } failure: { task, error in completion(task,nil,error) } } } else if (method == "GET") { sessionManager.get(urlString, parameters: params, headers: nil) { progress in } success: { task, responseObject in let responseObject = responseObject as AnyObject completion(task,responseObject,nil) } failure: { task, error in completion(task,nil,error) } } } /** 下载 */ func downLoad(inputURL: URL, filePath: String, progress: @escaping(_ progress: Progress) -> Void, completion: @escaping KMAdvertisementRequestServerCompletion) { let request: URLRequest = URLRequest.init(url: inputURL) self.sessionManager.requestSerializer.timeoutInterval = 100.0 let downloadTask = self.sessionManager.downloadTask(with: request) { resultProgress in progress(resultProgress) } destination: { url, response in return NSURL(fileURLWithPath: filePath) as URL } completionHandler: { resultResponse, resultUrl, error in completion(nil, resultResponse, error) } downloadTask.resume() } /* status AFNetworkReachabilityStatusUnknown = -1, 不知道监测的是什么 AFNetworkReachabilityStatusNotReachable = 0, 没有检测到网络 AFNetworkReachabilityStatusReachableViaWWAN = 1, 蜂窝网 AFNetworkReachabilityStatusReachableViaWiFi = 2, WIFI */ func reachabilityStatusChange(block: @escaping(AFNetworkReachabilityStatus) ->Void) { // 1.创建网络监测单例 let manager = AFNetworkReachabilityManager.shared() manager.setReachabilityStatusChange({ status in // 2.实现网络监测的回调 block(status) }) // 3.开始监测 manager.startMonitoring() } }