Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

backgroud upload #101

Merged
merged 1 commit into from
Nov 19, 2015
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion QiniuSDK/Http/QNSessionManager.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@
timeout:(UInt32)timeout
urlConverter:(QNUrlConvert)converter
upStatsDropRate:(float)dropRate
dns:(QNDnsManager*)dns;
dns:(QNDnsManager*)dns
enableBg:(BOOL)bg;

- (void) multipartPost:(NSString *)url
withData:(NSData *)data
Expand Down
44 changes: 38 additions & 6 deletions QiniuSDK/Http/QNSessionManager.m
Original file line number Diff line number Diff line change
Expand Up @@ -92,18 +92,21 @@ - (instancetype)initWithProxy:(NSDictionary *)proxyDict
timeout:(UInt32)timeout
urlConverter:(QNUrlConvert)converter
upStatsDropRate:(float)dropRate
dns:(QNDnsManager*)dns {
dns:(QNDnsManager*)dns
enableBg:(BOOL)bg{
if (self = [super init]) {
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
if (proxyDict != nil) {
configuration.connectionProxyDictionary = proxyDict;
_noProxy = NO;
}
else {
_noProxy = YES;
}
_httpManager = [[AFHTTPSessionManager alloc] initWithSessionConfiguration:configuration];
_httpManager.responseSerializer = [AFHTTPResponseSerializer serializer];
if (bg) {
_httpManager = [QNSessionManager sharedBgHttpManagerWithProxy:proxyDict];
}else{
_httpManager = [QNSessionManager httpManagerWithProxy:proxyDict];
}

_timeout = timeout;
_converter = converter;
_dns = dns;
Expand All @@ -113,8 +116,37 @@ - (instancetype)initWithProxy:(NSDictionary *)proxyDict
return self;
}

+ (AFHTTPSessionManager*) httpManagerWithProxy:(NSDictionary *)proxyDict{
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
if (proxyDict != nil) {
configuration.connectionProxyDictionary = proxyDict;
}

AFHTTPSessionManager *httpManager = [[AFHTTPSessionManager alloc] initWithSessionConfiguration:configuration];
httpManager.responseSerializer = [AFHTTPResponseSerializer serializer];
return httpManager;
}

+ (AFHTTPSessionManager*) sharedBgHttpManagerWithProxy:(NSDictionary *)proxyDict{
static AFHTTPSessionManager *httpManager = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
NSURLSessionConfiguration *configuration = nil;
configuration = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:[QNUserAgent sharedInstance].id];
if (proxyDict != nil) {
configuration.connectionProxyDictionary = proxyDict;
}

httpManager = [[AFHTTPSessionManager alloc] initWithSessionConfiguration:configuration];
httpManager.responseSerializer = [AFHTTPResponseSerializer serializer];
[httpManager setDidFinishEventsForBackgroundURLSessionBlock:^(NSURLSession *session) {}];
});

return httpManager;
}

- (instancetype)init {
return [self initWithProxy:nil timeout:60 urlConverter:nil upStatsDropRate:-1 dns:nil];
return [self initWithProxy:nil timeout:60 urlConverter:nil upStatsDropRate:-1 dns:nil enableBg:NO];
}

+ (QNResponseInfo *)buildResponseInfo:(NSHTTPURLResponse *)response
Expand Down
2 changes: 1 addition & 1 deletion QiniuSDK/Http/QNStats.m
Original file line number Diff line number Diff line change
Expand Up @@ -159,7 +159,7 @@ - (instancetype) initWithPushInterval: (int) interval
#endif

// timer for push
NSLog(@"interval %d", _pushInterval);
// NSLog(@"interval %d", _pushInterval);
_pushTimer = [NSTimer scheduledTimerWithTimeInterval:_pushInterval target:self selector:@selector(pushStats) userInfo:nil repeats:YES];
[_pushTimer fire];

Expand Down
6 changes: 5 additions & 1 deletion QiniuSDK/Http/QNUserAgent.m
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,11 @@

static NSString *clientId(void) {
#if __IPHONE_OS_VERSION_MIN_REQUIRED
return [[[UIDevice currentDevice] identifierForVendor] UUIDString];
NSString* s= [[[UIDevice currentDevice] identifierForVendor] UUIDString];
if (s == nil ) {
s = @"simulator";
}
return s;
#else
long long now_timestamp = [[NSDate date] timeIntervalSince1970] * 1000;
int r = arc4random() % 1000;
Expand Down
3 changes: 3 additions & 0 deletions QiniuSDK/Storage/QNConfiguration.h
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,8 @@ typedef void (^QNConfigurationBuilderBlock)(QNConfigurationBuilder *builder);

@property (readonly) BOOL disableATS;

@property (readonly) BOOL enableBackgroundUpload;

@property (readonly) float upStatsDropRate;

+ (instancetype)build:(QNConfigurationBuilderBlock)block;
Expand Down Expand Up @@ -178,6 +180,7 @@ typedef void (^QNConfigurationBuilderBlock)(QNConfigurationBuilder *builder);

@property (assign) BOOL disableATS;

@property (assign) BOOL enableBackgroundUpload;
/**
* 上传统计随机上传的概率,1为全部上传,0为不上传,0.5为随机上传一半。默认0.3
*/
Expand Down
2 changes: 2 additions & 0 deletions QiniuSDK/Storage/QNConfiguration.m
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,8 @@ - (instancetype)init {
_converter = nil;

_disableATS = YES;

_enableBackgroundUpload = NO;

_upStatsRate = 0.3;
}
Expand Down
2 changes: 1 addition & 1 deletion QiniuSDK/Storage/QNUploadManager.m
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ - (instancetype)initWithConfiguration:(QNConfiguration *)config {
_config = config;
#if (defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000) || (defined(__MAC_OS_X_VERSION_MAX_ALLOWED) && __MAC_OS_X_VERSION_MAX_ALLOWED >= 1090)
if (hasNSURLSession()) {
_httpManager = [[QNSessionManager alloc] initWithProxy:config.proxy timeout:config.timeoutInterval urlConverter:config.converter upStatsDropRate:-1 dns:config.dns];
_httpManager = [[QNSessionManager alloc] initWithProxy:config.proxy timeout:config.timeoutInterval urlConverter:config.converter upStatsDropRate:-1 dns:config.dns enableBg:config.enableBackgroundUpload];
}
else {
_httpManager = [[QNHttpManager alloc] initWithTimeout:config.timeoutInterval urlConverter:config.converter upStatsDropRate:config.upStatsDropRate dns:config.dns];
Expand Down
6 changes: 3 additions & 3 deletions QiniuSDKTests/QNSessionTest.m
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ - (void)testProxy {
(NSString *)kCFStreamPropertyHTTPProxyPort : @8888,
};

QNSessionManager *httpManager = [[QNSessionManager alloc] initWithProxy:proxyDict timeout:60 urlConverter:nil upStatsDropRate:-1 dns:nil];
QNSessionManager *httpManager = [[QNSessionManager alloc] initWithProxy:proxyDict timeout:60 urlConverter:nil upStatsDropRate:-1 dns:nil enableBg:NO];
NSData *data = [@"Hello, World!" dataUsingEncoding:NSUTF8StringEncoding];
__block QNResponseInfo *testInfo = nil;
[httpManager post:@"http://up123.qiniu.com" withData:data withParams:nil withHeaders:nil withStats:nil withCompleteBlock: ^(QNResponseInfo *info, NSDictionary *resp) {
Expand All @@ -110,7 +110,7 @@ - (void)testUrlConvert {
return [url stringByReplacingOccurrencesOfString:@"upnono" withString:@"up"];
};

QNSessionManager *httpManager = [[QNSessionManager alloc] initWithProxy:nil timeout:60 urlConverter:c upStatsDropRate:-1 dns:nil];
QNSessionManager *httpManager = [[QNSessionManager alloc] initWithProxy:nil timeout:60 urlConverter:c upStatsDropRate:-1 dns:nil enableBg:NO];
NSData *data = [@"Hello, World!" dataUsingEncoding:NSUTF8StringEncoding];
__block QNResponseInfo *testInfo = nil;
[httpManager post:@"http://upnono.qiniu.com" withData:data withParams:nil withHeaders:nil withStats:nil withCompleteBlock: ^(QNResponseInfo *info, NSDictionary *resp) {
Expand All @@ -129,7 +129,7 @@ - (void)testPostIp {
QNResolver *resolver = [[QNResolver alloc] initWithAddres:@"114.114.115.115"];
QNDnsManager *dns = [[QNDnsManager alloc] init:[NSArray arrayWithObject:resolver] networkInfo:[QNNetworkInfo normal]];
[dns putHosts: @"upnonono.qiniu.com" ip: [QNZone zone0].up.ips[0]];
QNSessionManager *httpManager = [[QNSessionManager alloc] initWithProxy:nil timeout:60 urlConverter:nil upStatsDropRate:-1 dns:dns];
QNSessionManager *httpManager = [[QNSessionManager alloc] initWithProxy:nil timeout:60 urlConverter:nil upStatsDropRate:-1 dns:dns enableBg:NO];
[httpManager post:@"http://upnonono.qiniu.com" withData:data withParams:nil withHeaders:nil withStats:nil withCompleteBlock: ^(QNResponseInfo *info, NSDictionary *resp) {
testInfo = info;
} withProgressBlock:nil withCancelBlock:nil];
Expand Down