Adds some network delegate methods (#3917)
Co-authored-by: “Malcolm <“mtoon@atlasprogramming.com”>
This commit is contained in:
@@ -109,6 +109,7 @@ MLN_DARWIN_OBJC_HEADERS = [
|
||||
"src/NSValue+MLNAdditions.h",
|
||||
"src/MLNPluginLayer.h",
|
||||
"src/MLNPluginStyleLayer.h",
|
||||
"src/MLNNetworkResponse.h",
|
||||
]
|
||||
|
||||
MLN_DARWIN_OBJCPP_HEADERS = [
|
||||
@@ -224,6 +225,7 @@ MLN_DARWIN_PUBLIC_OBJCPP_SOURCE = [
|
||||
"src/NSValue+MLNStyleAttributeAdditions.mm",
|
||||
"src/MLNPluginLayer.mm",
|
||||
"src/MLNPluginStyleLayer.mm",
|
||||
"src/MLNNetworkResponse.mm",
|
||||
]
|
||||
MLN_DARWIN_PUBLIC_OBJCPP_CUSTOM_DRAWABLE_SOURCE = [
|
||||
"src/MLNCustomDrawableStyleLayer_Private.h",
|
||||
|
||||
@@ -12,7 +12,6 @@
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
#include <mbgl/interface/native_apple_interface.h>
|
||||
|
||||
#include <mutex>
|
||||
#include <chrono>
|
||||
|
||||
@@ -292,11 +291,24 @@ std::unique_ptr<AsyncRequest> HTTPFileSource::request(const Resource& resource,
|
||||
|
||||
assert(session);
|
||||
|
||||
if ([networkManager.delegate respondsToSelector:@selector(willSendRequest:)]) {
|
||||
req = [networkManager.delegate willSendRequest:req];
|
||||
}
|
||||
|
||||
request->task = [session
|
||||
dataTaskWithRequest:req
|
||||
completionHandler:^(NSData* data, NSURLResponse* res, NSError* error) {
|
||||
session = nil;
|
||||
|
||||
if ([networkManager.delegate respondsToSelector:@selector(didReceiveResponse:)]) {
|
||||
MLNInternalNetworkResponse *networkResponse = [MLNInternalNetworkResponse responseWithData:data urlResponse:res error:error];
|
||||
networkResponse = [networkManager.delegate didReceiveResponse:networkResponse];
|
||||
data = networkResponse.data;
|
||||
res = networkResponse.response;
|
||||
error = networkResponse.error;
|
||||
}
|
||||
|
||||
|
||||
if (error && [error code] == NSURLErrorCancelled) {
|
||||
[MLNNativeNetworkManager.sharedManager cancelDownloadEventForResponse:res];
|
||||
return;
|
||||
|
||||
@@ -1,6 +1,23 @@
|
||||
#import <Foundation/Foundation.h>
|
||||
#import <mbgl/interface/native_apple_interface.h>
|
||||
|
||||
@implementation MLNInternalNetworkResponse
|
||||
|
||||
+(MLNInternalNetworkResponse *)responseWithData:(NSData *)data
|
||||
urlResponse:(NSURLResponse *)response
|
||||
error:(NSError *)error {
|
||||
|
||||
MLNInternalNetworkResponse *tempResult = [[MLNInternalNetworkResponse alloc] init];
|
||||
tempResult.data = data;
|
||||
tempResult.response = response;
|
||||
tempResult.error = error;
|
||||
return tempResult;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
|
||||
|
||||
@implementation MLNNativeNetworkManager
|
||||
|
||||
static MLNNativeNetworkManager *instance = nil;
|
||||
|
||||
@@ -4,12 +4,28 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@class MLNNativeNetworkManager;
|
||||
|
||||
@interface MLNInternalNetworkResponse : NSObject
|
||||
|
||||
@property (retain, nullable) NSError *error;
|
||||
@property (retain, nullable) NSData *data;
|
||||
@property (retain, nullable) NSURLResponse *response;
|
||||
|
||||
+ (MLNInternalNetworkResponse *)responseWithData:(NSData *)data
|
||||
urlResponse:(NSURLResponse *)response
|
||||
error:(NSError *)error;
|
||||
|
||||
@end
|
||||
|
||||
@protocol MLNNativeNetworkDelegate <NSObject>
|
||||
|
||||
@optional
|
||||
|
||||
- (NSURLSession *)sessionForNetworkManager:(MLNNativeNetworkManager *)networkManager;
|
||||
|
||||
- (NSMutableURLRequest *)willSendRequest:(NSMutableURLRequest *)request;
|
||||
|
||||
- (MLNInternalNetworkResponse *)didReceiveResponse:(MLNInternalNetworkResponse *)response;
|
||||
|
||||
@required
|
||||
|
||||
- (NSURLSessionConfiguration *)sessionConfiguration;
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
#import "MLNFoundation.h"
|
||||
#import "MLNNetworkResponse.h"
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@@ -24,6 +25,11 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
are not supported at this time.
|
||||
*/
|
||||
- (NSURLSession *)sessionForNetworkConfiguration:(MLNNetworkConfiguration *)configuration;
|
||||
|
||||
- (NSMutableURLRequest *)willSendRequest:(NSMutableURLRequest *)request;
|
||||
|
||||
- (MLNNetworkResponse *)didReceiveResponse:(MLNNetworkResponse *)response;
|
||||
|
||||
@end
|
||||
|
||||
/**
|
||||
|
||||
@@ -87,6 +87,39 @@ NSString * const kMLNDownloadPerformanceEvent = @"mobile.performance_trace";
|
||||
return session;
|
||||
}
|
||||
|
||||
- (NSMutableURLRequest *)willSendRequest:(NSMutableURLRequest *)request {
|
||||
|
||||
if ([self.delegate respondsToSelector:@selector(willSendRequest:)]) {
|
||||
return [self.delegate willSendRequest:request];
|
||||
}
|
||||
|
||||
return request;
|
||||
|
||||
}
|
||||
|
||||
- (MLNInternalNetworkResponse *)didReceiveResponse:(MLNInternalNetworkResponse *)response {
|
||||
|
||||
if ([self.delegate respondsToSelector:@selector(didReceiveResponse:)]) {
|
||||
|
||||
MLNNetworkResponse *tempResponse = [MLNNetworkResponse responseWithData:response.data
|
||||
urlResponse:response.response
|
||||
error:response.error];
|
||||
if (tempResponse) {
|
||||
MLNInternalNetworkResponse *internalResponse = [MLNInternalNetworkResponse responseWithData:tempResponse.data
|
||||
urlResponse:tempResponse.response
|
||||
error:tempResponse.error];
|
||||
return internalResponse;
|
||||
} else {
|
||||
return nil;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return response;
|
||||
|
||||
}
|
||||
|
||||
|
||||
- (NSURLSessionConfiguration *)sessionConfiguration {
|
||||
NSURLSessionConfiguration *sessionConfig = nil;
|
||||
@synchronized (self) {
|
||||
|
||||
19
platform/darwin/src/MLNNetworkResponse.h
Normal file
19
platform/darwin/src/MLNNetworkResponse.h
Normal file
@@ -0,0 +1,19 @@
|
||||
#import <Foundation/Foundation.h>
|
||||
#import "MLNFoundation.h"
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
MLN_EXPORT
|
||||
@interface MLNNetworkResponse : NSObject
|
||||
|
||||
@property (retain, nullable) NSError *error;
|
||||
@property (retain, nullable) NSData *data;
|
||||
@property (retain, nullable) NSURLResponse *response;
|
||||
|
||||
+ (MLNNetworkResponse *)responseWithData:(NSData *)data
|
||||
urlResponse:(NSURLResponse *)response
|
||||
error:(NSError *)error;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
17
platform/darwin/src/MLNNetworkResponse.mm
Normal file
17
platform/darwin/src/MLNNetworkResponse.mm
Normal file
@@ -0,0 +1,17 @@
|
||||
#import <Foundation/Foundation.h>
|
||||
#import "MLNNetworkResponse.h"
|
||||
|
||||
@implementation MLNNetworkResponse
|
||||
|
||||
+(MLNNetworkResponse *)responseWithData:(NSData *)data
|
||||
urlResponse:(NSURLResponse *)response
|
||||
error:(NSError *)error {
|
||||
|
||||
MLNNetworkResponse *tempResult = [[MLNNetworkResponse alloc] init];
|
||||
tempResult.data = data;
|
||||
tempResult.response = response;
|
||||
tempResult.error = error;
|
||||
return tempResult;
|
||||
}
|
||||
|
||||
@end
|
||||
Reference in New Issue
Block a user