Initial implementation of network reachability callbacks
This commit is contained in:
parent
2c4a643d7d
commit
95442be7b3
2 changed files with 59 additions and 2 deletions
|
|
@ -35,6 +35,13 @@ typedef enum {
|
||||||
AFPropertyListParameterEncoding,
|
AFPropertyListParameterEncoding,
|
||||||
} AFHTTPClientParameterEncoding;
|
} AFHTTPClientParameterEncoding;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
typedef enum {
|
||||||
|
AFNetworkNotReachable,
|
||||||
|
AFNetworkReachable,
|
||||||
|
} AFNetworkReachabilityStatus;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Returns a string, replacing certain characters with the equivalent percent escape sequence based on the specified encoding.
|
Returns a string, replacing certain characters with the equivalent percent escape sequence based on the specified encoding.
|
||||||
|
|
||||||
|
|
@ -157,9 +164,17 @@ extern NSString * AFQueryStringFromParametersWithEncoding(NSDictionary *paramete
|
||||||
*/
|
*/
|
||||||
- (id)initWithBaseURL:(NSURL *)url;
|
- (id)initWithBaseURL:(NSURL *)url;
|
||||||
|
|
||||||
///----------------------------------
|
///-----------------------------------
|
||||||
|
/// @name Managing Reachability Status
|
||||||
|
///-----------------------------------
|
||||||
|
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
- (void)setReachabilityStatusChangeBlock:(void (^)(AFNetworkReachabilityStatus reachabilityStatus))block;
|
||||||
|
|
||||||
|
///-------------------------------
|
||||||
/// @name Managing HTTP Operations
|
/// @name Managing HTTP Operations
|
||||||
///----------------------------------
|
///-------------------------------
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Attempts to register a subclass of `AFHTTPRequestOperation`, adding it to a chain to automatically generate request operations from a URL request.
|
Attempts to register a subclass of `AFHTTPRequestOperation`, adding it to a chain to automatically generate request operations from a URL request.
|
||||||
|
|
|
||||||
|
|
@ -27,6 +27,7 @@
|
||||||
#import "AFJSONUtilities.h"
|
#import "AFJSONUtilities.h"
|
||||||
|
|
||||||
#import <Availability.h>
|
#import <Availability.h>
|
||||||
|
#import <SystemConfiguration/SystemConfiguration.h>
|
||||||
|
|
||||||
#if __IPHONE_OS_VERSION_MIN_REQUIRED
|
#if __IPHONE_OS_VERSION_MIN_REQUIRED
|
||||||
#import <UIKit/UIKit.h>
|
#import <UIKit/UIKit.h>
|
||||||
|
|
@ -49,6 +50,16 @@ static NSString * const kAFMultipartFormBoundary = @"Boundary+0xAbCdEfGbOuNdArY"
|
||||||
|
|
||||||
#pragma mark -
|
#pragma mark -
|
||||||
|
|
||||||
|
typedef void (^AFNetworkReachabilityStatusBlock)(AFNetworkReachabilityStatus reachabilityStatus);
|
||||||
|
|
||||||
|
static AFNetworkReachabilityStatus AFNetworkReachabilityStatusFromFlags(SCNetworkReachabilityFlags flags) {
|
||||||
|
if ((flags & kSCNetworkReachabilityFlagsReachable) == 0) {
|
||||||
|
return AFNetworkNotReachable;
|
||||||
|
} else {
|
||||||
|
return AFNetworkReachable;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static NSUInteger const kAFHTTPClientDefaultMaxConcurrentOperationCount = 4;
|
static NSUInteger const kAFHTTPClientDefaultMaxConcurrentOperationCount = 4;
|
||||||
|
|
||||||
static NSString * AFBase64EncodedStringFromString(NSString *string) {
|
static NSString * AFBase64EncodedStringFromString(NSString *string) {
|
||||||
|
|
@ -124,6 +135,8 @@ static NSString * AFPropertyListStringFromParameters(NSDictionary *parameters) {
|
||||||
@property (readwrite, nonatomic, retain) NSMutableArray *registeredHTTPOperationClassNames;
|
@property (readwrite, nonatomic, retain) NSMutableArray *registeredHTTPOperationClassNames;
|
||||||
@property (readwrite, nonatomic, retain) NSMutableDictionary *defaultHeaders;
|
@property (readwrite, nonatomic, retain) NSMutableDictionary *defaultHeaders;
|
||||||
@property (readwrite, nonatomic, retain) NSOperationQueue *operationQueue;
|
@property (readwrite, nonatomic, retain) NSOperationQueue *operationQueue;
|
||||||
|
@property (readwrite, nonatomic, assign) SCNetworkReachabilityRef networkReachability;
|
||||||
|
@property (readwrite, nonatomic, copy) AFNetworkReachabilityStatusBlock networkReachabilityStatusBlock;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@implementation AFHTTPClient
|
@implementation AFHTTPClient
|
||||||
|
|
@ -133,6 +146,8 @@ static NSString * AFPropertyListStringFromParameters(NSDictionary *parameters) {
|
||||||
@synthesize registeredHTTPOperationClassNames = _registeredHTTPOperationClassNames;
|
@synthesize registeredHTTPOperationClassNames = _registeredHTTPOperationClassNames;
|
||||||
@synthesize defaultHeaders = _defaultHeaders;
|
@synthesize defaultHeaders = _defaultHeaders;
|
||||||
@synthesize operationQueue = _operationQueue;
|
@synthesize operationQueue = _operationQueue;
|
||||||
|
@synthesize networkReachability = _networkReachability;
|
||||||
|
@synthesize networkReachabilityStatusBlock = _networkReachabilityStatusBlock;
|
||||||
|
|
||||||
+ (AFHTTPClient *)clientWithBaseURL:(NSURL *)url {
|
+ (AFHTTPClient *)clientWithBaseURL:(NSURL *)url {
|
||||||
return [[[self alloc] initWithBaseURL:url] autorelease];
|
return [[[self alloc] initWithBaseURL:url] autorelease];
|
||||||
|
|
@ -178,11 +193,38 @@ static NSString * AFPropertyListStringFromParameters(NSDictionary *parameters) {
|
||||||
[_registeredHTTPOperationClassNames release];
|
[_registeredHTTPOperationClassNames release];
|
||||||
[_defaultHeaders release];
|
[_defaultHeaders release];
|
||||||
[_operationQueue release];
|
[_operationQueue release];
|
||||||
|
[_networkReachabilityStatusBlock release];
|
||||||
|
if (_networkReachability) {
|
||||||
|
CFRelease(_networkReachability);
|
||||||
|
}
|
||||||
|
|
||||||
[super dealloc];
|
[super dealloc];
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma mark -
|
#pragma mark -
|
||||||
|
|
||||||
|
static void AFReachabilityCallback(SCNetworkReachabilityRef __unused target, SCNetworkReachabilityFlags flags, void *info) {
|
||||||
|
if (info) {
|
||||||
|
AFNetworkReachabilityStatusBlock block = (AFNetworkReachabilityStatusBlock)info;
|
||||||
|
block(AFNetworkReachabilityStatusFromFlags(flags));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)setReachabilityStatusChangeBlock:(void (^)(AFNetworkReachabilityStatus reachabilityStatus))block {
|
||||||
|
if (_networkReachability) {
|
||||||
|
SCNetworkReachabilityUnscheduleFromRunLoop(_networkReachability, CFRunLoopGetMain(), (CFStringRef)NSRunLoopCommonModes);
|
||||||
|
CFRelease(_networkReachability);
|
||||||
|
}
|
||||||
|
|
||||||
|
self.networkReachabilityStatusBlock = block;
|
||||||
|
self.networkReachability = SCNetworkReachabilityCreateWithName(kCFAllocatorDefault, [[self.baseURL host] UTF8String]);
|
||||||
|
SCNetworkReachabilityContext context = {0, self.networkReachabilityStatusBlock, NULL, NULL, NULL};
|
||||||
|
SCNetworkReachabilitySetCallback(self.networkReachability, AFReachabilityCallback, &context);
|
||||||
|
SCNetworkReachabilityScheduleWithRunLoop(self.networkReachability, CFRunLoopGetMain(), (CFStringRef)NSRunLoopCommonModes);
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark -
|
||||||
|
|
||||||
- (BOOL)registerHTTPOperationClass:(Class)operationClass {
|
- (BOOL)registerHTTPOperationClass:(Class)operationClass {
|
||||||
if (![operationClass isSubclassOfClass:[AFHTTPRequestOperation class]]) {
|
if (![operationClass isSubclassOfClass:[AFHTTPRequestOperation class]]) {
|
||||||
return NO;
|
return NO;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue