| #import "ViewController.h" |
| #import "AppDelegate.h" |
| |
| #import <Courier/Courier.h> |
| |
| static NSString * const TestTaskGroup1 = @"TestTaskGroup1"; |
| |
| static NSString * const TestTaskGroup2 = @"TestTaskGroup2"; |
| |
| @interface ViewController () |
| |
| @property (nonatomic, strong) CRSessionController *sessionController; |
| |
| @property (nonatomic, weak) IBOutlet UIImageView *imageView; |
| |
| @end |
| |
| @implementation ViewController |
| |
| - (void)viewDidLoad { |
| [super viewDidLoad]; |
| NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration]; |
| configuration.HTTPMaximumConnectionsPerHost = 1; |
| configuration.URLCache = nil; |
| _sessionController = [CRSessionController sessionControllerWithConfiguration:configuration]; |
| |
| [_sessionController setReachabilityStatusChangeBlock:^(NetworkStatus status) { |
| if (status == NotReachable) { |
| NSLog(@"Not reachable!"); |
| } else { |
| NSLog(@"Reachable!"); |
| } |
| }]; |
| |
| [_sessionController startReachabilityMonitoring]; |
| } |
| |
| - (void)didReceiveMemoryWarning { |
| [super didReceiveMemoryWarning]; |
| // Dispose of any resources that can be recreated. |
| } |
| |
| #pragma mark - IBAction |
| |
| - (IBAction)startNetworkRequests:(id)sender { |
| for (NSInteger i = 0; i < 10; i++) { |
| BOOL even = i % 2; |
| if (even) { |
| [self startImageDownloadTaskInTaskGroup:TestTaskGroup1]; |
| } else { |
| [self startImageDownloadTaskInTaskGroup:TestTaskGroup2]; |
| } |
| } |
| } |
| |
| - (IBAction)startNetworkRequestsOnAnotherThread:(id)sender { |
| for (NSInteger i = 0; i < 10; i++) { |
| BOOL even = i % 2; |
| dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{ |
| if (even) { |
| [self startImageDownloadTaskInTaskGroup:TestTaskGroup1]; |
| } else { |
| [self startImageDownloadTaskInTaskGroup:TestTaskGroup2]; |
| } |
| }); |
| } |
| } |
| |
| - (IBAction)stopNetworkRequests:(id)sender { |
| [self.sessionController cancelTasksInGroup:TestTaskGroup1]; |
| [self.sessionController cancelTasksInGroup:TestTaskGroup2]; |
| } |
| |
| - (IBAction)nilSessionController:(id)sender { |
| @autoreleasepool { |
| [self.sessionController.session invalidateAndCancel]; |
| self.sessionController = nil; |
| } |
| } |
| |
| - (IBAction)printHasTasks:(id)sender { |
| NSLog(@"Has tasks %i", [self.sessionController hasTasksInGroup:TestTaskGroup1 |
| withState:NSURLSessionTaskStateRunning]); |
| } |
| |
| #pragma mark - |
| |
| - (void)startImageDownloadTaskInTaskGroup:(NSString *)taskGroup { |
| NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://static.fjcdn.com/pictures/Space_03b120_799520.jpg"]]; |
| NSURLSessionDataTask *task = |
| [self.sessionController dataTaskForRequest:request |
| taskGroup:taskGroup |
| completionHandler: ^(NSData *data, |
| NSURLResponse *response, |
| BOOL cachedResponse, |
| NSError *error) { |
| |
| if (error) { |
| NSLog(@"Error: %@", error); |
| } |
| |
| if (response.cou_success) { |
| NSLog(@"Downloaded image!"); |
| UIImage *image = [UIImage imageWithData:data]; |
| dispatch_async(dispatch_get_main_queue(), ^{ |
| self.imageView.image = image; |
| }); |
| } |
| else { |
| NSLog(@"Error: %li", response.cou_statusCode); |
| } |
| }]; |
| [task resume]; |
| } |
| |
| @end |