From 3e8437ae559487362fae3525beb79c534c213a51 Mon Sep 17 00:00:00 2001
From: 单军华
Date: Thu, 12 Jul 2018 13:44:34 +0800
Subject: [PATCH] bug修复和功能优化
---
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