// // 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() // /* 下载地址 */ // NSURL *url = [NSURL URLWithString:requestURL]; // NSURLRequest *request = [NSURLRequest requestWithURL:url]; // /* 下载路径 */ // NSString *downFilePath = [NSString stringWithFormat:@"%@/%@", [self setPathOfDocumentsByFileCreated:created fileName:fileName], fileName]; // self.downFilePath = downFilePath; // // /* 开始请求下载 */ // self.downloadTask = [_sessionManager downloadTaskWithRequest:request progress:^(NSProgress * _Nonnull downloadProgress) { // float p = downloadProgress.fractionCompleted * 100; // if (progress) { // progress(p); // } // NSLog(@"下载进度:%.0f%", downloadProgress.fractionCompleted * 100); // } destination:^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response) { // dispatch_async(dispatch_get_main_queue(), ^{ // //如果需要进行UI操作,需要获取主线程进行操作 // }); // /* 设定下载到的位置 */ // return [NSURL fileURLWithPath:downFilePath]; // // } completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error) { // NSLog(@"下载完成"); // if (error) { // if (failure) { // failure(error); // } // [weakSelf removeDownLoadFile]; // } else { // if (success) { // success(downFilePath,[weakSelf setPathOfDocumentsByFileCreated:created fileName:fileName]); // } // } // }]; // [self.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() } }