/
DXDALDataProviderHTTP.m
79 lines (59 loc) · 2.6 KB
/
DXDALDataProviderHTTP.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
//
// Created by zen on 3/2/12.
//
// To change the template use AppCode | Preferences | File Templates.
//
#import "DXDALDataProviderHTTP.h"
#import "AFNetworking.h"
#import "JSONKit.h"
#import "DXDALRequestHTTP.h"
#import "DXDALParser.h"
#import "DXDALMapper.h"
@implementation DXDALDataProviderHTTP
@synthesize httpClient = _httpClient;
- (id)initWithBaseURL:(NSURL*)aBaseURL {
self = [super init];
if (self) {
_httpClient = [[DXDALHTTPClient alloc] initWithBaseURL:aBaseURL];
}
return self;
}
- (void)enqueueRequest:(DXDALRequest *)aRequest {
assert(aRequest != nil);
[_httpClient clearDefaultHeaders];
DXDALRequestHTTP *httpRequest = (DXDALRequestHTTP*)aRequest;
if (httpRequest.defaultHTTPHeaders){
for (NSString *key in [httpRequest.defaultHTTPHeaders allKeys]){
[_httpClient setDefaultHeader:key value:[httpRequest.defaultHTTPHeaders objectForKey:key]];
}
}
AFHTTPRequestOperation *operation = [self operationFromRequest:httpRequest];
[_httpClient enqueueHTTPRequestOperation:operation];
}
- (NSURLRequest*)urlRequestFromRequest:(DXDALRequestHTTP*) httpRequest
{
return [_httpClient requestWithMethod:httpRequest.httpMethod path:httpRequest.httpPath parameters:httpRequest.params];
}
- (AFHTTPRequestOperation*) operationFromRequest:(DXDALRequestHTTP*) httpRequest
{
NSURLRequest *urlRequest = [self urlRequestFromRequest:httpRequest];
NSLog(@"start request: %@", [urlRequest URL]);
AFHTTPRequestOperation *operation = [_httpClient HTTPRequestOperationWithRequest:urlRequest success:^(AFHTTPRequestOperation *operation, id responseObject)
{
id parsedObject = [httpRequest.parser parseString:operation.responseString];
id result = [httpRequest.mapper mapFromInputData:parsedObject withClass:httpRequest.entityClass];
[httpRequest didFinishWithResponse:result];
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSMutableDictionary *userInfo = [[error userInfo] mutableCopy];
NSDictionary *serverErrorMessage = [operation.responseString objectFromJSONString];
if (serverErrorMessage) {
[userInfo setObject:serverErrorMessage forKey:@"ErrorMessage"];
}
NSError *innerError = [[NSError alloc] initWithDomain:@"DXDAL"
code:operation.response.statusCode
userInfo:userInfo];
[httpRequest didFailWithResponse:innerError];
}];
return operation;
}
@end