From 7b02207537d35bfa1714bf8beafc921f717d100a Mon Sep 17 00:00:00 2001 From: 单军华 Date: Wed, 11 Jul 2018 10:47:42 +0800 Subject: [PATCH] 首次上传 --- screendisplay/screendisplay/Classes/Network/PPNetworkHelper/PPNetworkHelper.m | 413 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 413 insertions(+), 0 deletions(-) diff --git a/screendisplay/screendisplay/Classes/Network/PPNetworkHelper/PPNetworkHelper.m b/screendisplay/screendisplay/Classes/Network/PPNetworkHelper/PPNetworkHelper.m new file mode 100755 index 0000000..3f2d57e --- /dev/null +++ b/screendisplay/screendisplay/Classes/Network/PPNetworkHelper/PPNetworkHelper.m @@ -0,0 +1,413 @@ +// +// PPNetworkHelper.m +// PPNetworkHelper +// +// Created by AndyPang on 16/8/12. +// Copyright �� 2016��� AndyPang. All rights reserved. +// + + +#import "PPNetworkHelper.h" +#import "AFNetworking.h" +#import "AFNetworkActivityIndicatorManager.h" + +#ifdef DEBUG +#define PPLog(...) printf("[%s] %s [���%d���]: %s\n", __TIME__ ,__PRETTY_FUNCTION__ ,__LINE__, [[NSString stringWithFormat:__VA_ARGS__] UTF8String]) +#else +#define PPLog(...) +#endif + +#define NSStringFormat(format,...) [NSString stringWithFormat:format,##__VA_ARGS__] + +@implementation PPNetworkHelper + +static BOOL _isOpenLog; // ��������������������������� +static NSMutableArray *_allSessionTask; +static AFHTTPSessionManager *_sessionManager; + +#pragma mark - ������������������ ++ (void)networkStatusWithBlock:(PPNetworkStatus)networkStatus { + + [[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) { + switch (status) { + case AFNetworkReachabilityStatusUnknown: + networkStatus ? networkStatus(PPNetworkStatusUnknown) : nil; + if (_isOpenLog) PPLog(@"������������"); + break; + case AFNetworkReachabilityStatusNotReachable: + networkStatus ? networkStatus(PPNetworkStatusNotReachable) : nil; + if (_isOpenLog) PPLog(@"���������"); + break; + case AFNetworkReachabilityStatusReachableViaWWAN: + networkStatus ? networkStatus(PPNetworkStatusReachableViaWWAN) : nil; + if (_isOpenLog) PPLog(@"������������������"); + break; + case AFNetworkReachabilityStatusReachableViaWiFi: + networkStatus ? networkStatus(PPNetworkStatusReachableViaWiFi) : nil; + if (_isOpenLog) PPLog(@"WIFI"); + break; + } + }]; + +} + ++ (BOOL)isNetwork { + return [AFNetworkReachabilityManager sharedManager].reachable; +} + ++ (BOOL)isWWANNetwork { + return [AFNetworkReachabilityManager sharedManager].reachableViaWWAN; +} + ++ (BOOL)isWiFiNetwork { + return [AFNetworkReachabilityManager sharedManager].reachableViaWiFi; +} + ++ (void)openLog { + _isOpenLog = YES; +} + ++ (void)closeLog { + _isOpenLog = NO; +} + ++ (void)cancelAllRequest { + // ��������� + @synchronized(self) { + [[self allSessionTask] enumerateObjectsUsingBlock:^(NSURLSessionTask *_Nonnull task, NSUInteger idx, BOOL * _Nonnull stop) { + [task cancel]; + }]; + [[self allSessionTask] removeAllObjects]; + } +} + ++ (void)cancelRequestWithURL:(NSString *)URL { + if (!URL) { return; } + @synchronized (self) { + [[self allSessionTask] enumerateObjectsUsingBlock:^(NSURLSessionTask *_Nonnull task, NSUInteger idx, BOOL * _Nonnull stop) { + if ([task.currentRequest.URL.absoluteString hasPrefix:URL]) { + [task cancel]; + [[self allSessionTask] removeObject:task]; + *stop = YES; + } + }]; + } +} + +#pragma mark - GET��������������� ++ (NSURLSessionTask *)GET:(NSString *)URL + parameters:(id)parameters + success:(PPHttpRequestSuccess)success + failure:(PPHttpRequestFailed)failure { + return [self GET:URL parameters:parameters responseCache:nil success:success failure:failure]; +} + +#pragma mark - POST��������������� ++ (NSURLSessionTask *)POST:(NSString *)URL + parameters:(id)parameters + success:(PPHttpRequestSuccess)success + failure:(PPHttpRequestFailed)failure { + return [self POST:URL parameters:parameters responseCache:nil success:success failure:failure]; +} + +#pragma mark - GET������������������ ++ (NSURLSessionTask *)GET:(NSString *)URL + parameters:(id)parameters + responseCache:(PPHttpRequestCache)responseCache + success:(PPHttpRequestSuccess)success + failure:(PPHttpRequestFailed)failure { + //������������ + responseCache!=nil ? responseCache([PPNetworkCache httpCacheForURL:URL parameters:parameters]) : nil; + + NSURLSessionTask *sessionTask = [_sessionManager GET:URL parameters:parameters progress:^(NSProgress * _Nonnull uploadProgress) { + + } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { + + if (_isOpenLog) {PPLog(@"responseObject = %@",responseObject);} + [[self allSessionTask] removeObject:task]; + success ? success(responseObject) : nil; + //��������������������������� + responseCache!=nil ? [PPNetworkCache setHttpCache:responseObject URL:URL parameters:parameters] : nil; + + } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { + + if (_isOpenLog) {PPLog(@"error = %@",error);} + [[self allSessionTask] removeObject:task]; + failure ? failure(error) : nil; + + }]; + // ������sessionTask��������� + sessionTask ? [[self allSessionTask] addObject:sessionTask] : nil ; + + return sessionTask; +} + +#pragma mark - POST������������������ ++ (NSURLSessionTask *)POST:(NSString *)URL + parameters:(id)parameters + responseCache:(PPHttpRequestCache)responseCache + success:(PPHttpRequestSuccess)success + failure:(PPHttpRequestFailed)failure { + //������������ + responseCache!=nil ? responseCache([PPNetworkCache httpCacheForURL:URL parameters:parameters]) : nil; + + NSURLSessionTask *sessionTask = [_sessionManager POST:URL parameters:parameters progress:^(NSProgress * _Nonnull uploadProgress) { + + } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { + + if (_isOpenLog) {PPLog(@"responseObject = %@",responseObject);} + [[self allSessionTask] removeObject:task]; + success ? success(responseObject) : nil; + //��������������������������� + responseCache!=nil ? [PPNetworkCache setHttpCache:responseObject URL:URL parameters:parameters] : nil; + + } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { + + if (_isOpenLog) {PPLog(@"error = %@",error);} + [[self allSessionTask] removeObject:task]; + failure ? failure(error) : nil; + + }]; + + // ���������������sessionTask��������� + sessionTask ? [[self allSessionTask] addObject:sessionTask] : nil ; + return sessionTask; +} + +#pragma mark - ������������ ++ (NSURLSessionTask *)uploadFileWithURL:(NSString *)URL + parameters:(id)parameters + name:(NSString *)name + filePath:(NSString *)filePath + progress:(PPHttpProgress)progress + success:(PPHttpRequestSuccess)success + failure:(PPHttpRequestFailed)failure { + + NSURLSessionTask *sessionTask = [_sessionManager POST:URL parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) { + NSError *error = nil; + [formData appendPartWithFileURL:[NSURL URLWithString:filePath] name:name error:&error]; + (failure && error) ? failure(error) : nil; + } progress:^(NSProgress * _Nonnull uploadProgress) { + //������������ + dispatch_sync(dispatch_get_main_queue(), ^{ + progress ? progress(uploadProgress) : nil; + }); + } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { + + if (_isOpenLog) {PPLog(@"responseObject = %@",responseObject);} + [[self allSessionTask] removeObject:task]; + success ? success(responseObject) : nil; + + } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { + + if (_isOpenLog) {PPLog(@"error = %@",error);} + [[self allSessionTask] removeObject:task]; + failure ? failure(error) : nil; + }]; + + // ������sessionTask��������� + sessionTask ? [[self allSessionTask] addObject:sessionTask] : nil ; + + return sessionTask; +} + +#pragma mark - ������������������ ++ (NSURLSessionTask *)uploadImagesWithURL:(NSString *)URL + parameters:(id)parameters + name:(NSString *)name + images:(NSArray<UIImage *> *)images + fileNames:(NSArray<NSString *> *)fileNames + imageScale:(CGFloat)imageScale + imageType:(NSString *)imageType + progress:(PPHttpProgress)progress + success:(PPHttpRequestSuccess)success + failure:(PPHttpRequestFailed)failure { + NSURLSessionTask *sessionTask = [_sessionManager POST:URL parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) { + + for (NSUInteger i = 0; i < images.count; i++) { + // ��������������������������������������������������� + NSData *imageData = UIImageJPEGRepresentation(images[i], imageScale ?: 1.f); + // ������������������������, ���fileNames���nil��������� + + NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; + formatter.dateFormat = @"yyyyMMddHHmmss"; + NSString *str = [formatter stringFromDate:[NSDate date]]; + NSString *imageFileName = NSStringFormat(@"%@%ld.%@",str,i,imageType?:@"jpg"); + + [formData appendPartWithFileData:imageData + name:name + fileName:fileNames ? NSStringFormat(@"%@.%@",fileNames[i],imageType?:@"jpg") : imageFileName + mimeType:NSStringFormat(@"image/%@",imageType ?: @"jpg")]; + } + + } progress:^(NSProgress * _Nonnull uploadProgress) { + //������������ + dispatch_sync(dispatch_get_main_queue(), ^{ + progress ? progress(uploadProgress) : nil; + }); + } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { + + if (_isOpenLog) {PPLog(@"responseObject = %@",responseObject);} + [[self allSessionTask] removeObject:task]; + success ? success(responseObject) : nil; + + } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { + + if (_isOpenLog) {PPLog(@"error = %@",error);} + [[self allSessionTask] removeObject:task]; + failure ? failure(error) : nil; + }]; + + // ������sessionTask��������� + sessionTask ? [[self allSessionTask] addObject:sessionTask] : nil ; + + return sessionTask; +} + +#pragma mark - ������������ ++ (NSURLSessionTask *)downloadWithURL:(NSString *)URL + fileDir:(NSString *)fileDir + progress:(PPHttpProgress)progress + success:(void(^)(NSString *))success + failure:(PPHttpRequestFailed)failure { + NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:URL]]; + __block NSURLSessionDownloadTask *downloadTask = [_sessionManager downloadTaskWithRequest:request progress:^(NSProgress * _Nonnull downloadProgress) { + //������������ + dispatch_sync(dispatch_get_main_queue(), ^{ + progress ? progress(downloadProgress) : nil; + }); + } destination:^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response) { + //������������������ + NSString *downloadDir = [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:fileDir ? fileDir : @"Download"]; + //��������������������� + NSFileManager *fileManager = [NSFileManager defaultManager]; + //������Download������ + [fileManager createDirectoryAtPath:downloadDir withIntermediateDirectories:YES attributes:nil error:nil]; + //������������������ + NSString *filePath = [downloadDir stringByAppendingPathComponent:response.suggestedFilename]; + //���������������������URL������ + return [NSURL fileURLWithPath:filePath]; + + } completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error) { + + [[self allSessionTask] removeObject:downloadTask]; + if(failure && error) {failure(error) ; return ;}; + success ? success(filePath.absoluteString /** NSURL->NSString*/) : nil; + + }]; + //������������ + [downloadTask resume]; + // ������sessionTask��������� + downloadTask ? [[self allSessionTask] addObject:downloadTask] : nil ; + + return downloadTask; +} + +/** + ������������������������task������ + */ ++ (NSMutableArray *)allSessionTask { + if (!_allSessionTask) { + _allSessionTask = [[NSMutableArray alloc] init]; + } + return _allSessionTask; +} + +#pragma mark - ���������AFHTTPSessionManager������������ +/** + ������������������������ + */ ++ (void)load { + [[AFNetworkReachabilityManager sharedManager] startMonitoring]; +} +/** + * ���������HTTP������������������AFHTTPSessionManager + * ������������������:http://www.jianshu.com/p/5969bbb4af9f + */ ++ (void)initialize { + _sessionManager = [AFHTTPSessionManager manager]; + _sessionManager.requestSerializer.timeoutInterval = 30.f; + _sessionManager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/html", @"text/json", @"text/plain", @"text/javascript", @"text/xml", @"image/*", nil]; + // ������������������������������ + [AFNetworkActivityIndicatorManager sharedManager].enabled = YES; +} + +#pragma mark - ������AFHTTPSessionManager������������ + ++ (void)setAFHTTPSessionManagerProperty:(void (^)(AFHTTPSessionManager *))sessionManager { + sessionManager ? sessionManager(_sessionManager) : nil; +} + ++ (void)setRequestSerializer:(PPRequestSerializer)requestSerializer { + _sessionManager.requestSerializer = requestSerializer==PPRequestSerializerHTTP ? [AFHTTPRequestSerializer serializer] : [AFJSONRequestSerializer serializer]; +} + ++ (void)setResponseSerializer:(PPResponseSerializer)responseSerializer { + _sessionManager.responseSerializer = responseSerializer==PPResponseSerializerHTTP ? [AFHTTPResponseSerializer serializer] : [AFJSONResponseSerializer serializer]; +} + ++ (void)setRequestTimeoutInterval:(NSTimeInterval)time { + _sessionManager.requestSerializer.timeoutInterval = time; +} + ++ (void)setValue:(NSString *)value forHTTPHeaderField:(NSString *)field { + [_sessionManager.requestSerializer setValue:value forHTTPHeaderField:field]; +} + ++ (void)openNetworkActivityIndicator:(BOOL)open { + [[AFNetworkActivityIndicatorManager sharedManager] setEnabled:open]; +} + ++ (void)setSecurityPolicyWithCerPath:(NSString *)cerPath validatesDomainName:(BOOL)validatesDomainName { + NSData *cerData = [NSData dataWithContentsOfFile:cerPath]; + // ������������������������ + AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate]; + // ������������������������������(������������)������������������YES + securityPolicy.allowInvalidCertificates = YES; + // ������������������������������������YES; + securityPolicy.validatesDomainName = validatesDomainName; + securityPolicy.pinnedCertificates = [[NSSet alloc] initWithObjects:cerData, nil]; + + [_sessionManager setSecurityPolicy:securityPolicy]; +} + +@end + + +#pragma mark - NSDictionary,NSArray��������� +/* + ************************************************************************************ + *������NSDictionary���NSArray���������, ���������������json������������������ + ************************************************************************************ + */ + +#ifdef DEBUG +@implementation NSArray (PP) + +- (NSString *)descriptionWithLocale:(id)locale { + NSMutableString *strM = [NSMutableString stringWithString:@"(\n"]; + [self enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { + [strM appendFormat:@"\t%@,\n", obj]; + }]; + [strM appendString:@")"]; + + return strM; +} + +@end + +@implementation NSDictionary (PP) + +- (NSString *)descriptionWithLocale:(id)locale { + NSMutableString *strM = [NSMutableString stringWithString:@"{\n"]; + [self enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { + [strM appendFormat:@"\t%@ = %@;\n", key, obj]; + }]; + + [strM appendString:@"}\n"]; + + return strM; +} +@end +#endif + -- Gitblit v1.8.0