cdts/xdts-ios 3/TreeHole/Code/Utility/VoiceRecoder/DDHttpSupport/DDHttpManager.m

443 lines
17 KiB
Mathematica
Raw Permalink Normal View History

2023-07-27 09:20:00 +08:00
//
// DDHttpManager.m
// ResultContained
//
// Created by on 15/8/21.
// Copyright (c) 2015 . All rights reserved.
//
#import "DDHttpManager.h"
#import "YYCache/YYCache.h"
#define DDWS(weakSelf) __weak __typeof(&*self)weakSelf = self;
#define DDSS(strongSelf) __strong __typeof(weakSelf)strongSelf = weakSelf;
#define DDHttpCacheName @"DDHttpYYCache"
@interface DDHttpManager ()
{
YYCache *httpCache;
}
@end;
@implementation DDHttpManager
+ (DDHttpManager *)ShareInstance {
static DDHttpManager *sharedHttpManagerInstance = nil;
static dispatch_once_t predicate;
dispatch_once(&predicate, ^{
sharedHttpManagerInstance = [[self alloc] init];
});
return sharedHttpManagerInstance;
}
#pragma mark - methods
- (void)commonHeadersForHttp:(AFHTTPSessionManager *)manager {
if (_commonHeader) {
[manager.requestSerializer clearAuthorizationHeader];
[_commonHeader enumerateKeysAndObjectsUsingBlock:^(NSString *key, NSString *obj, BOOL * _Nonnull stop) {
[manager.requestSerializer setValue:obj forHTTPHeaderField:key];
}];
}
}
- (void)AFNetMethodsSupport:(NSString *)url
Parameters:(NSDictionary *)dic
Method:(DDHttpMethodType)method
RequestMethod:(DDRequestType)request
SucessBlock:(void (^)(id))success
FailedBlock:(void (^)(NSError *))failure {
[self AFNetMethodsSupport:url
Parameters:dic
Method:method
RequestMethod:request
CacheMethod:_cacheMethod
HeaderDic:nil
SucessBlock:success
FailedBlock:failure];
}
- (void)AFNetMethodsSupport:(NSString *)url
Parameters:(NSDictionary *)dic
Method:(DDHttpMethodType)method
RequestMethod:(DDRequestType)request
CacheMethod:(DDHttpCacheMethod)cache
SucessBlock:(void (^)(id))success
FailedBlock:(void (^)(NSError *))failure {
[self AFNetMethodsSupport:url
Parameters:dic
Method:method
RequestMethod:request
CacheMethod:cache
HeaderDic:nil
SucessBlock:success
FailedBlock:failure];
}
- (void)AFNetMethodsSupport:(NSString *)url
Parameters:(NSDictionary *)dic
Method:(DDHttpMethodType)method
RequestMethod:(DDRequestType)request
HeaderDic:(NSDictionary *)header
SucessBlock:(void (^)(id))success
FailedBlock:(void (^)(NSError *))failure {
[self AFNetMethodsSupport:url
Parameters:dic
Method:method
RequestMethod:request
CacheMethod:_cacheMethod
HeaderDic:header
SucessBlock:success
FailedBlock:failure];
}
- (void)AFNetMethodsSupport:(NSString *)url
Parameters:(NSDictionary *)dic
Method:(DDHttpMethodType)method
RequestMethod:(DDRequestType)request
CacheMethod:(DDHttpCacheMethod)cache
HeaderDic:(NSDictionary *)header
SucessBlock:(void (^)(id))success
FailedBlock:(void (^)(NSError *))failure {
BOOL needHttp = NO;
BOOL needCache = NO;
switch (cache) {
case DDCacheElseHttp: {
if (!httpCache) {
httpCache = [[YYCache alloc]initWithName:DDHttpCacheName];
}
if ([httpCache containsObjectForKey:url]) {
needCache = YES;
}else {
needHttp = YES;
}
}
break;
case DDCacheThenHttp: {
needCache = YES;
needHttp = YES;
}
break;
case DDCacheMemoryOnly: {
needCache = YES;
}
break;
case DDHttpOnly: {
needHttp = YES;
}
break;
default: {
if (!httpCache) {
httpCache = [[YYCache alloc]initWithName:DDHttpCacheName];
}
if ([httpCache containsObjectForKey:url]) {
needCache = YES;
}else {
needHttp = YES;
}
}
break;
}
if (needCache) {
if (!httpCache) {
httpCache = [[YYCache alloc]initWithName:DDHttpCacheName];
}
if ([httpCache containsObjectForKey:url]) {
[self handleSucessBlock:success
BlockObj:[httpCache objectForKey:url]
Url:url];
}
}
if (needHttp) {
AFHTTPSessionManager *session = [AFHTTPSessionManager manager];
[self initRequestType:session
RequestType:request];
[self commonHeadersForHttp:session];
[self addHttpHeader:header
AFManager:session];
session.responseSerializer = [AFHTTPResponseSerializer serializer];
[session.responseSerializer.acceptableContentTypes setByAddingObject:@"text/html"];
// url = [url stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
DDWS(weakSelf)
switch (method) {
case DDHttpGet: {
[session GET:url
parameters:dic
headers:nil
progress:nil
success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
DDSS(strongSelf)
[strongSelf handleSucessBlock:success
BlockObj:responseObject
Url:url];
}
failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
if (failure) {
failure(error);
}
}];
}
break;
case DDHttpPost: {
[session POST:url
parameters:dic
headers:nil
progress:nil
success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
DDSS(strongSelf)
[strongSelf handleSucessBlock:success
BlockObj:responseObject
Url:url];
}
failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
if (failure) {
failure(error);
}
}];
}
break;
case DDHttpPut: {
[session PUT:url
parameters:dic
headers:nil
success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
DDSS(strongSelf)
[strongSelf handleSucessBlock:success
BlockObj:responseObject
Url:url];
}
failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
if (failure) {
failure(error);
}
}];
}
break;
case DDHttpPatch: {
[session PATCH:url
parameters:dic
headers:nil
success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
DDSS(strongSelf)
[strongSelf handleSucessBlock:success
BlockObj:responseObject
Url:url];
}
failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
if (failure) {
failure(error);
}
}];
}
break;
case DDHttpDelete: {
session.requestSerializer.HTTPMethodsEncodingParametersInURI = [NSSet setWithObjects:@"GET", @"HEAD", nil];
[session DELETE:url
parameters:dic
headers:nil
success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
DDSS(strongSelf)
[strongSelf handleSucessBlock:success
BlockObj:responseObject
Url:url];
}
failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
if (failure) {
failure(error);
}
}];
}
break;
default: {
[session GET:url
parameters:dic
headers:nil
progress:nil
success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
DDSS(strongSelf)
[strongSelf handleSucessBlock:success
BlockObj:responseObject
Url:url];
}
failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
if (failure) {
failure(error);
}
}];
}
break;
}
}
}
#pragma mark - progressBlock,progressBlock
- (void)AFNetPOSTSupport:(NSString *)url
Parameters:(NSDictionary *)dic
RequestMethod:(DDRequestType)request
ConstructingBodyWithBlock:(void(^)(id<AFMultipartFormData> formData))bodyblock
SucessBlock:(void (^)(id))success
FailedBlock:(void (^)(NSError *))failure {
[self AFNetPOSTSupport:url
Parameters:dic
Header:nil
RequestMethod:request
ConstructingBodyWithBlock:bodyblock
SucessBlock:success
FailedBlock:failure];
}
- (void)AFNetPOSTSupport:(NSString *)url
Parameters:(NSDictionary *)dic
Header:(NSDictionary *)header
RequestMethod:(DDRequestType)request
ConstructingBodyWithBlock:(void(^)(id<AFMultipartFormData> formData))bodyblock
SucessBlock:(void (^)(id))success
FailedBlock:(void (^)(NSError *))failure {
AFHTTPSessionManager *session = [AFHTTPSessionManager manager];
[self initRequestType:session RequestType:request];
[self commonHeadersForHttp:session];
[self addHttpHeader:header
AFManager:session];
session.responseSerializer = [AFHTTPResponseSerializer serializer];
[session.responseSerializer.acceptableContentTypes setByAddingObject:@"text/html"];
// if ([[UIDevice currentDevice].systemVersion floatValue] >= 9.0) {
// url = [url stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
// }else {
// url = [url stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
// }
[session POST:url
parameters:dic
headers:nil
constructingBodyWithBlock:bodyblock
progress:nil
success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
if (success) {
success(responseObject);
};
}
failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
if (failure) {
failure(error);
}
}];
}
#pragma mark - afnetworkmuldataURL
- (void)AFNetUrlPOSTSupport:(NSString *)url
Parameters:(NSDictionary *)dic
SucessBlock:(void (^)(id))success
FailedBlock:(void (^)(NSError *))failure {
// if ([[UIDevice currentDevice].systemVersion floatValue] >= 9.0) {
// url = [url stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
// }else {
// url = [url stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
// }
NSMutableURLRequest *formRequest = [[AFHTTPRequestSerializer serializer] requestWithMethod:@"POST"
URLString:url
parameters:dic
error:nil];
[formRequest setValue:@"application/x-www-form-urlencoded; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
[self commonHeadersForHttp:manager];
AFJSONResponseSerializer *responseSerializer = [AFJSONResponseSerializer serializer];
manager.responseSerializer = responseSerializer;
[manager.responseSerializer.acceptableContentTypes setByAddingObject:@"text/html"];
NSURLSessionDataTask *dataTask = [manager dataTaskWithRequest:formRequest
uploadProgress:nil
downloadProgress:nil
completionHandler:^(NSURLResponse *_Nonnull response,id _Nullable responseObject,NSError *_Nullable error) {
if(error) {
if (failure) {
failure(error);
}
}
if (responseObject && success) {
success(responseObject);
}
}];
[dataTask resume];
}
#pragma mark - support methods
- (NSString *)gettime {
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
//,
[dateFormatter setDateFormat:@"yyyy-MM-dd HH-mm-ss"];
NSString *currentDateStr = [dateFormatter stringFromDate:[NSDate date]];
NSString *strUrl = [currentDateStr stringByReplacingOccurrencesOfString:@"-" withString:@""];
NSString *newDate = [strUrl substringToIndex:8];
return newDate;
}
/**
AFNetworkhttp
@param header http
@param manager
*/
- (void)addHttpHeader:(NSDictionary *)header
AFManager:(AFHTTPSessionManager *)manager {
if (header) {
[[header allKeys] enumerateObjectsUsingBlock:^(NSString *obj, NSUInteger idx, BOOL * _Nonnull stop) {
[manager.requestSerializer setValue:header[obj]
forHTTPHeaderField:obj];
}];
}
}
/**
request
@param session af
@param request request
*/
- (void)initRequestType:(AFHTTPSessionManager *)session
RequestType:(DDRequestType)request {
switch (request) {
case DDRequestHttp:
session.requestSerializer = [AFHTTPRequestSerializer serializer];
break;
case DDRequestJson:
session.requestSerializer = [AFJSONRequestSerializer serializer];
break;
case DDRequestPlist:
session.requestSerializer = [AFPropertyListRequestSerializer serializer];
break;
default:
session.requestSerializer = [AFHTTPRequestSerializer serializer];
break;
}
session.requestSerializer.timeoutInterval = 60;
}
/**
object
@param block block
@param blockObj http
@param url http
*/
- (void)handleSucessBlock:(void (^)(id))block
BlockObj:(id)blockObj
Url:(NSString *)url {
if (!httpCache) {
httpCache = [[YYCache alloc]initWithName:DDHttpCacheName];
}
///YYCache blockObj
[httpCache setObject:blockObj
forKey:url];
if (block) {
block(blockObj);
}
}
@end