| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176 |
- //
- // MiscNetworkRequests.m
- // FLEXample
- //
- // Created by Tanner on 3/12/20.
- // Copyright © 2020 Flipboard. All rights reserved.
- //
- #import "MiscNetworkRequests.h"
- @implementation MiscNetworkRequests
- + (void)sendExampleRequests {
- [[self new] sendExampleNetworkRequests];
- }
- - (NSMutableURLRequest *)request:(NSString *)url {
- return [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url]];
- }
- - (void)sendExampleNetworkRequests {
- NSString *kFlipboardIcon = @"https://cdn.flipboard.com/serviceIcons/v2/social-icon-flipboard-96.png";
- NSString *kRandomAnimal = @"https://lorempixel.com/248/250/animals/";
- NSString *kSnowLeopard = @"https://lorempixel.com/248/250/animals/4/";
- NSString *kRateLimit = @"https://api.github.com/rate_limit";
- NSString *kImgurUpload = @"https://api.imgur.com/3/upload";
-
- //#######################
- // #
- // NSURLSession #
- // #
- //#######################
-
- NSMutableArray *pendingTasks = [NSMutableArray array];
-
- // With delegate //
-
- NSURLSessionConfiguration *config = NSURLSessionConfiguration.defaultSessionConfiguration;
- config.timeoutIntervalForRequest = 10.0;
- NSURLSession *session = [NSURLSession sessionWithConfiguration:config delegate:self delegateQueue:nil];
- // NSURLSessionDataTask
- [pendingTasks addObject:[session dataTaskWithURL:[NSURL URLWithString:kFlipboardIcon]]];
- // NSURLSessionDownloadTask
- [pendingTasks addObject:[session downloadTaskWithURL:[NSURL URLWithString:kRandomAnimal]]];
-
- // Without delegate //
-
- // NSURLSessionDownloadTask
- [pendingTasks addObject:[NSURLSession.sharedSession
- downloadTaskWithURL:[NSURL URLWithString:kSnowLeopard]
- completionHandler:^(NSURL *location, NSURLResponse *response, NSError *error) {
- NSInteger status = [(NSHTTPURLResponse *)response statusCode];
-
- if (status == 200) {
- NSLog(@"Image downloaded to %@", location.absoluteString);
- } else {
- NSLog(@"Image failed to download with status %@ (error: %@)",
- @(status), error.localizedDescription
- );
- }
- }
- ]];
- // NSURLSessionDataTask
- [pendingTasks addObject:[NSURLSession.sharedSession
- dataTaskWithURL:[NSURL URLWithString:kRateLimit]
- completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
- }]];
- // NSURLSessionUploadTask
- NSMutableURLRequest *upload = [self request:kImgurUpload];
- upload.HTTPMethod = @"POST";
- [upload setValue:@"Client-ID 0e8a1cb2eb594ef" forHTTPHeaderField:@"Authorization"];
- [pendingTasks addObject:[session
- uploadTaskWithRequest:upload
- fromFile:[NSBundle.mainBundle URLForResource:@"image" withExtension:@"jpg"]
- completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
- NSInteger status = [(NSHTTPURLResponse *)response statusCode];
-
- if (status == 200) {
- NSError *jsonError = nil;
- NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:0 error:&jsonError];
-
- if (json) {
- NSLog(@"Image uploaded to %@", json[@"data"][@"link"]);
- } else {
- NSLog(@"Error decoding JSON after uploading image: %@", jsonError.localizedDescription);
- }
- } else if (data) {
- NSError *jsonError = nil;
- NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:0 error:&jsonError];
-
- if (json) {
- NSLog(@"Image failed to upload with error: %@", json[@"data"][@"error"]);
- } else {
- NSLog(@"Error decoding JSON after failing to upload image: %@", jsonError.localizedDescription);
- }
- } else {
- NSLog(@"Error uploading image: %@", error.localizedDescription);
- }
- }
- ]];
- NSTimeInterval delayTime = 5;
- const NSTimeInterval stagger = 1;
- // Stagger each task
- for (NSURLSessionTask *task in pendingTasks) {
- dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayTime * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
- [task resume];
- });
-
- delayTime += stagger;
- }
-
- //########################
- // #
- // NSURLConnection #
- // #
- //########################
- #pragma clang diagnostic push
- #pragma clang diagnostic ignored "-Wdeprecated-declarations"
-
- // Remaining requests made through NSURLConnection with a delegate
- NSArray *requestURLStrings = @[ @"https://lorempixel.com/400/400/",
- @"https://google.com",
- @"https://api.github.com/users/Flipboard/repos",
- @"https://api.github.com/repos/Flipboard/FLEX/issues",
- @"https://cloud.githubusercontent.com/assets/516562/3971767/e4e21f58-27d6-11e4-9b07-4d1fe82b80ca.png",
- @"https://lorempixel.com/750/1334/" ];
-
- // Async NSURLConnection
- [NSURLConnection sendAsynchronousRequest:[self request:@"https://api.github.com/repos/Flipboard/FLEX/issues"]
- queue:NSOperationQueue.mainQueue completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
- }];
-
- // Begin staggering NSURLConnection requests
- self.connections = [NSMutableArray array];
- for (NSString *urlString in requestURLStrings) {
- dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayTime * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
- [self.connections addObject:[NSURLConnection connectionWithRequest:[self request:urlString] delegate:self]];
- });
-
- delayTime += stagger;
- }
-
- #pragma clang diagnostic pop
- }
- - (void)URLSession:(NSURLSession *)session didBecomeInvalidWithError:(NSError *)error {
- NSLog(@"URLSession didBecomeInvalidWithError: %@", error.localizedDescription);
- }
- - (void)URLSession:(NSURLSession *)session
- dataTask:(NSURLSessionDataTask *)dataTask
- didReceiveResponse:(NSURLResponse *)response
- completionHandler:(void (^)(NSURLSessionResponseDisposition))completionHandler {
- completionHandler(NSURLSessionResponseAllow);
- }
- - (void)URLSession:(NSURLSession *)session
- downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location {
- NSLog(@"didFinishDownloadingToURL: %@", location.absoluteString);
- }
- - (void)connectionDidFinishLoading:(NSURLConnection *)connection {
- [self.connections removeObject:connection];
- }
- - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
- [self.connections removeObject:connection];
- }
- @end
|