mirror of
https://github.com/samsonjs/Marshmallows.git
synced 2026-04-27 15:07:42 +00:00
factor out MMHTTPReqeust from MMHTTPClient
This commit is contained in:
parent
157b0a1666
commit
bd551f9340
5 changed files with 260 additions and 201 deletions
|
|
@ -7,8 +7,6 @@
|
||||||
objects = {
|
objects = {
|
||||||
|
|
||||||
/* Begin PBXBuildFile section */
|
/* Begin PBXBuildFile section */
|
||||||
7BD1009D1413375B00A9921B /* RegexKitLite.h in Headers */ = {isa = PBXBuildFile; fileRef = 7BD1009B1413375B00A9921B /* RegexKitLite.h */; };
|
|
||||||
7BD1009E1413375B00A9921B /* RegexKitLite.m in Sources */ = {isa = PBXBuildFile; fileRef = 7BD1009C1413375B00A9921B /* RegexKitLite.m */; };
|
|
||||||
7BD100A2141341EB00A9921B /* MMHTTPClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 7BD100A0141341EB00A9921B /* MMHTTPClient.h */; };
|
7BD100A2141341EB00A9921B /* MMHTTPClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 7BD100A0141341EB00A9921B /* MMHTTPClient.h */; };
|
||||||
7BD100A3141341EB00A9921B /* MMHTTPClient.m in Sources */ = {isa = PBXBuildFile; fileRef = 7BD100A1141341EB00A9921B /* MMHTTPClient.m */; };
|
7BD100A3141341EB00A9921B /* MMHTTPClient.m in Sources */ = {isa = PBXBuildFile; fileRef = 7BD100A1141341EB00A9921B /* MMHTTPClient.m */; };
|
||||||
7BD100A614134FBE00A9921B /* MMHTTPRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 7BD100A414134FBE00A9921B /* MMHTTPRequest.h */; };
|
7BD100A614134FBE00A9921B /* MMHTTPRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 7BD100A414134FBE00A9921B /* MMHTTPRequest.h */; };
|
||||||
|
|
@ -21,8 +19,6 @@
|
||||||
/* End PBXBuildFile section */
|
/* End PBXBuildFile section */
|
||||||
|
|
||||||
/* Begin PBXFileReference section */
|
/* Begin PBXFileReference section */
|
||||||
7BD1009B1413375B00A9921B /* RegexKitLite.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RegexKitLite.h; sourceTree = "<group>"; };
|
|
||||||
7BD1009C1413375B00A9921B /* RegexKitLite.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RegexKitLite.m; sourceTree = "<group>"; };
|
|
||||||
7BD100A0141341EB00A9921B /* MMHTTPClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MMHTTPClient.h; sourceTree = "<group>"; };
|
7BD100A0141341EB00A9921B /* MMHTTPClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MMHTTPClient.h; sourceTree = "<group>"; };
|
||||||
7BD100A1141341EB00A9921B /* MMHTTPClient.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MMHTTPClient.m; sourceTree = "<group>"; };
|
7BD100A1141341EB00A9921B /* MMHTTPClient.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MMHTTPClient.m; sourceTree = "<group>"; };
|
||||||
7BD100A414134FBE00A9921B /* MMHTTPRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MMHTTPRequest.h; sourceTree = "<group>"; };
|
7BD100A414134FBE00A9921B /* MMHTTPRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MMHTTPRequest.h; sourceTree = "<group>"; };
|
||||||
|
|
@ -49,20 +45,10 @@
|
||||||
/* End PBXFrameworksBuildPhase section */
|
/* End PBXFrameworksBuildPhase section */
|
||||||
|
|
||||||
/* Begin PBXGroup section */
|
/* Begin PBXGroup section */
|
||||||
7BD1009F1413396F00A9921B /* RegexKitLite */ = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
7BD1009B1413375B00A9921B /* RegexKitLite.h */,
|
|
||||||
7BD1009C1413375B00A9921B /* RegexKitLite.m */,
|
|
||||||
);
|
|
||||||
name = RegexKitLite;
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
7BE32CFB14132EE3008F2DEA = {
|
7BE32CFB14132EE3008F2DEA = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
7BE32D0B14132EE4008F2DEA /* Marshmallows */,
|
7BE32D0B14132EE4008F2DEA /* Marshmallows */,
|
||||||
7BD1009F1413396F00A9921B /* RegexKitLite */,
|
|
||||||
7BE32D0814132EE4008F2DEA /* Frameworks */,
|
7BE32D0814132EE4008F2DEA /* Frameworks */,
|
||||||
7BE32D0714132EE4008F2DEA /* Products */,
|
7BE32D0714132EE4008F2DEA /* Products */,
|
||||||
);
|
);
|
||||||
|
|
@ -117,7 +103,6 @@
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
7BE32D6A14133618008F2DEA /* NSString+sanity.h in Headers */,
|
7BE32D6A14133618008F2DEA /* NSString+sanity.h in Headers */,
|
||||||
7BD1009D1413375B00A9921B /* RegexKitLite.h in Headers */,
|
|
||||||
7BD100A2141341EB00A9921B /* MMHTTPClient.h in Headers */,
|
7BD100A2141341EB00A9921B /* MMHTTPClient.h in Headers */,
|
||||||
7BD100A614134FBE00A9921B /* MMHTTPRequest.h in Headers */,
|
7BD100A614134FBE00A9921B /* MMHTTPRequest.h in Headers */,
|
||||||
7BD100AA141353B700A9921B /* NSDate+relative.h in Headers */,
|
7BD100AA141353B700A9921B /* NSDate+relative.h in Headers */,
|
||||||
|
|
@ -175,7 +160,6 @@
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
7BE32D6B14133618008F2DEA /* NSString+sanity.m in Sources */,
|
7BE32D6B14133618008F2DEA /* NSString+sanity.m in Sources */,
|
||||||
7BD1009E1413375B00A9921B /* RegexKitLite.m in Sources */,
|
|
||||||
7BD100A3141341EB00A9921B /* MMHTTPClient.m in Sources */,
|
7BD100A3141341EB00A9921B /* MMHTTPClient.m in Sources */,
|
||||||
7BD100A714134FBE00A9921B /* MMHTTPRequest.m in Sources */,
|
7BD100A714134FBE00A9921B /* MMHTTPRequest.m in Sources */,
|
||||||
7BD100AB141353B700A9921B /* NSDate+relative.m in Sources */,
|
7BD100AB141353B700A9921B /* NSDate+relative.m in Sources */,
|
||||||
|
|
|
||||||
|
|
@ -7,22 +7,10 @@
|
||||||
//
|
//
|
||||||
|
|
||||||
#import <UIKit/UIImage.h>
|
#import <UIKit/UIImage.h>
|
||||||
|
#import "MMHTTPRequest.h"
|
||||||
#define MMHTTPClientStatusError -1
|
|
||||||
#define MMHTTPClientDefaultTimeout 120
|
|
||||||
|
|
||||||
typedef void (^MMHTTPClientCallback)(NSInteger status, id data);
|
|
||||||
typedef void (^MMHTTPClientTextCallback)(NSInteger status, NSString *text);
|
|
||||||
typedef void (^MMHTTPClientImageCallback)(NSInteger status, UIImage *image);
|
|
||||||
|
|
||||||
@interface MMHTTPClient : NSObject
|
@interface MMHTTPClient : NSObject
|
||||||
{
|
{
|
||||||
NSMutableDictionary *_callbacks;
|
|
||||||
NSMutableDictionary *_connections;
|
|
||||||
NSMutableDictionary *_data;
|
|
||||||
NSMutableDictionary *_headers;
|
|
||||||
NSMutableDictionary *_statusCodes;
|
|
||||||
NSMutableDictionary *_types;
|
|
||||||
NSString *_baseURL;
|
NSString *_baseURL;
|
||||||
NSUInteger _timeout;
|
NSUInteger _timeout;
|
||||||
}
|
}
|
||||||
|
|
@ -35,14 +23,14 @@ typedef void (^MMHTTPClientImageCallback)(NSInteger status, UIImage *image);
|
||||||
+ (NSString *) pathFor: (NSString *)first, ... NS_REQUIRES_NIL_TERMINATION;
|
+ (NSString *) pathFor: (NSString *)first, ... NS_REQUIRES_NIL_TERMINATION;
|
||||||
+ (NSString *) urlFor: (NSString *)first, ... NS_REQUIRES_NIL_TERMINATION;
|
+ (NSString *) urlFor: (NSString *)first, ... NS_REQUIRES_NIL_TERMINATION;
|
||||||
+ (NSString *) urlWithPath: (NSString *)path;
|
+ (NSString *) urlWithPath: (NSString *)path;
|
||||||
+ (void) request: (NSDictionary *)options then: (MMHTTPClientCallback)callback;
|
+ (MMHTTPRequest *) request: (NSDictionary *)options then: (MMHTTPCallback)callback;
|
||||||
+ (void) get: (NSString *)url then: (MMHTTPClientCallback)callback;
|
+ (MMHTTPRequest *) get: (NSString *)url then: (MMHTTPCallback)callback;
|
||||||
+ (void) getImage: (NSString *)url then: (MMHTTPClientImageCallback)callback;
|
+ (MMHTTPRequest *) getImage: (NSString *)url then: (MMHTTPImageCallback)callback;
|
||||||
+ (void) getText: (NSString *)url then: (MMHTTPClientTextCallback)callback;
|
+ (MMHTTPRequest *) getText: (NSString *)url then: (MMHTTPTextCallback)callback;
|
||||||
+ (void) post: (NSString *)url then: (MMHTTPClientCallback)callback;
|
+ (MMHTTPRequest *) post: (NSString *)url then: (MMHTTPCallback)callback;
|
||||||
+ (void) post: (NSString *)url data: (NSData *)data then: (MMHTTPClientCallback)callback;
|
+ (MMHTTPRequest *) post: (NSString *)url data: (NSData *)data then: (MMHTTPCallback)callback;
|
||||||
+ (void) put: (NSString *)url data: (NSData *)data then: (MMHTTPClientCallback)callback;
|
+ (MMHTTPRequest *) put: (NSString *)url data: (NSData *)data then: (MMHTTPCallback)callback;
|
||||||
+ (void) delete: (NSString *)url then: (MMHTTPClientCallback)callback;
|
+ (MMHTTPRequest *) delete: (NSString *)url then: (MMHTTPCallback)callback;
|
||||||
|
|
||||||
@property (nonatomic, retain) NSString *baseURL;
|
@property (nonatomic, retain) NSString *baseURL;
|
||||||
@property NSUInteger timeout;
|
@property NSUInteger timeout;
|
||||||
|
|
@ -52,13 +40,13 @@ typedef void (^MMHTTPClientImageCallback)(NSInteger status, UIImage *image);
|
||||||
- (NSString *) pathFor: (NSString *)first, ... NS_REQUIRES_NIL_TERMINATION;
|
- (NSString *) pathFor: (NSString *)first, ... NS_REQUIRES_NIL_TERMINATION;
|
||||||
- (NSString *) urlFor: (NSString *)first, ... NS_REQUIRES_NIL_TERMINATION;
|
- (NSString *) urlFor: (NSString *)first, ... NS_REQUIRES_NIL_TERMINATION;
|
||||||
- (NSString *) urlWithPath: (NSString *)path;
|
- (NSString *) urlWithPath: (NSString *)path;
|
||||||
- (void) request: (NSDictionary *)options then: (MMHTTPClientCallback)callback;
|
- (MMHTTPRequest *) request: (NSDictionary *)options then: (MMHTTPCallback)callback;
|
||||||
- (void) get: (NSString *)url then: (MMHTTPClientCallback)callback;
|
- (MMHTTPRequest *) get: (NSString *)url then: (MMHTTPCallback)callback;
|
||||||
- (void) getImage: (NSString *)url then: (MMHTTPClientImageCallback)callback;
|
- (MMHTTPRequest *) getImage: (NSString *)url then: (MMHTTPImageCallback)callback;
|
||||||
- (void) getText: (NSString *)url then: (MMHTTPClientTextCallback)callback;
|
- (MMHTTPRequest *) getText: (NSString *)url then: (MMHTTPTextCallback)callback;
|
||||||
- (void) post: (NSString *)url then: (MMHTTPClientCallback)callback;
|
- (MMHTTPRequest *) post: (NSString *)url then: (MMHTTPCallback)callback;
|
||||||
- (void) post: (NSString *)url data: (NSData *)data then: (MMHTTPClientCallback)callback;
|
- (MMHTTPRequest *) post: (NSString *)url data: (NSData *)data then: (MMHTTPCallback)callback;
|
||||||
- (void) put: (NSString *)url data: (NSData *)data then: (MMHTTPClientCallback)callback;
|
- (MMHTTPRequest *) put: (NSString *)url data: (NSData *)data then: (MMHTTPCallback)callback;
|
||||||
- (void) delete: (NSString *)url then: (MMHTTPClientCallback)callback;
|
- (MMHTTPRequest *) delete: (NSString *)url then: (MMHTTPCallback)callback;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
|
||||||
|
|
@ -73,54 +73,54 @@ NSString *JoinURLComponents(NSString *first, va_list args)
|
||||||
return [[[self sharedClient] baseURL] stringByAppendingPathComponent: path];
|
return [[[self sharedClient] baseURL] stringByAppendingPathComponent: path];
|
||||||
}
|
}
|
||||||
|
|
||||||
+ (void) request: (NSDictionary *)options then: (MMHTTPClientCallback)callback
|
+ (MMHTTPRequest *) request: (NSDictionary *)options then: (MMHTTPCallback)callback
|
||||||
{
|
{
|
||||||
[[self sharedClient] request: options then: callback];
|
return [[self sharedClient] request: options then: callback];
|
||||||
}
|
}
|
||||||
|
|
||||||
+ (void) get: (NSString *)url then: (MMHTTPClientCallback)callback
|
+ (MMHTTPRequest *) get: (NSString *)url then: (MMHTTPCallback)callback
|
||||||
{
|
{
|
||||||
[[self sharedClient] get: url then: callback];
|
return [[self sharedClient] get: url then: callback];
|
||||||
}
|
}
|
||||||
|
|
||||||
+ (void) getImage: (NSString *)url then: (MMHTTPClientImageCallback)callback
|
+ (MMHTTPRequest *) getImage: (NSString *)url then: (MMHTTPImageCallback)callback
|
||||||
{
|
{
|
||||||
[[self sharedClient] getImage: url then: callback];
|
return [[self sharedClient] getImage: url then: callback];
|
||||||
}
|
}
|
||||||
|
|
||||||
+ (void) getText: (NSString *)url then: (MMHTTPClientTextCallback)callback
|
+ (MMHTTPRequest *) getText: (NSString *)url then: (MMHTTPTextCallback)callback
|
||||||
{
|
{
|
||||||
[[self sharedClient] getText: url then: callback];
|
return [[self sharedClient] getText: url then: callback];
|
||||||
}
|
}
|
||||||
|
|
||||||
+ (void) post: (NSString *)url then: (MMHTTPClientCallback)callback
|
+ (MMHTTPRequest *) post: (NSString *)url then: (MMHTTPCallback)callback
|
||||||
{
|
{
|
||||||
[[self sharedClient] post: url then: callback];
|
return [[self sharedClient] post: url then: callback];
|
||||||
}
|
}
|
||||||
|
|
||||||
+ (void) post: (NSString *)url data: (NSData *)data then: (MMHTTPClientCallback)callback
|
+ (MMHTTPRequest *) post: (NSString *)url data: (NSData *)data then: (MMHTTPCallback)callback
|
||||||
{
|
{
|
||||||
[[self sharedClient] post: url data: data then: callback];
|
return [[self sharedClient] post: url data: data then: callback];
|
||||||
}
|
}
|
||||||
|
|
||||||
+ (void) put: (NSString *)url data: (NSData *)data then: (MMHTTPClientCallback)callback
|
+ (MMHTTPRequest *) put: (NSString *)url data: (NSData *)data then: (MMHTTPCallback)callback
|
||||||
{
|
{
|
||||||
[[self sharedClient] put: url data: data then: callback];
|
return [[self sharedClient] put: url data: data then: callback];
|
||||||
}
|
}
|
||||||
|
|
||||||
+ (void) delete: (NSString *)url then: (MMHTTPClientCallback)callback
|
+ (MMHTTPRequest *) delete: (NSString *)url then: (MMHTTPCallback)callback
|
||||||
{
|
{
|
||||||
[[self sharedClient] delete: url then: callback];
|
return [[self sharedClient] delete: url then: callback];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (id) init
|
- (id) init
|
||||||
{
|
{
|
||||||
return [self initWithBaseURL: nil timeout: MMHTTPClientDefaultTimeout];
|
return [self initWithBaseURL: nil timeout: MMHTTPRequestDefaultTimeout];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (id) initWithBaseURL: (NSString *)baseURL
|
- (id) initWithBaseURL: (NSString *)baseURL
|
||||||
{
|
{
|
||||||
return [self initWithBaseURL: baseURL timeout: MMHTTPClientDefaultTimeout];
|
return [self initWithBaseURL: baseURL timeout: MMHTTPRequestDefaultTimeout];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (id) initWithBaseURL: (NSString *)baseURL timeout: (NSUInteger)timeout
|
- (id) initWithBaseURL: (NSString *)baseURL timeout: (NSUInteger)timeout
|
||||||
|
|
@ -129,12 +129,6 @@ NSString *JoinURLComponents(NSString *first, va_list args)
|
||||||
if (self) {
|
if (self) {
|
||||||
_baseURL = [baseURL copy];
|
_baseURL = [baseURL copy];
|
||||||
_timeout = timeout;
|
_timeout = timeout;
|
||||||
_callbacks = [[NSMutableDictionary alloc] init];
|
|
||||||
_connections = [[NSMutableDictionary alloc] init];
|
|
||||||
_data = [[NSMutableDictionary alloc] init];
|
|
||||||
_headers = [[NSMutableDictionary alloc] init];
|
|
||||||
_statusCodes = [[NSMutableDictionary alloc] init];
|
|
||||||
_types = [[NSMutableDictionary alloc] init];
|
|
||||||
}
|
}
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
@ -162,193 +156,85 @@ NSString *JoinURLComponents(NSString *first, va_list args)
|
||||||
return [_baseURL stringByAppendingPathComponent: path];
|
return [_baseURL stringByAppendingPathComponent: path];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) getImage: (NSString *)url then: (MMHTTPClientImageCallback)callback
|
- (MMHTTPRequest *) getImage: (NSString *)url then: (MMHTTPImageCallback)callback
|
||||||
{
|
{
|
||||||
[self request: [NSDictionary dictionary] then: (MMHTTPClientCallback)callback];
|
return [self request: [NSDictionary dictionary] then: (MMHTTPCallback)callback];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) getText: (NSString *)url then: (MMHTTPClientTextCallback)callback
|
- (MMHTTPRequest *) getText: (NSString *)url then: (MMHTTPTextCallback)callback
|
||||||
{
|
{
|
||||||
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
|
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
|
||||||
url, @"url",
|
url, @"url",
|
||||||
@"text", @"type",
|
@"text", @"type",
|
||||||
nil];
|
nil];
|
||||||
[self request: options then: (MMHTTPClientCallback)callback];
|
return [self request: options then: (MMHTTPCallback)callback];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) get: (NSString *)url then: (MMHTTPClientCallback)callback
|
- (MMHTTPRequest *) get: (NSString *)url then: (MMHTTPCallback)callback
|
||||||
{
|
{
|
||||||
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
|
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
|
||||||
url, @"url",
|
url, @"url",
|
||||||
@"image", @"type",
|
@"image", @"type",
|
||||||
nil];
|
nil];
|
||||||
[self request: options then: (MMHTTPClientCallback)callback];
|
return [self request: options then: (MMHTTPCallback)callback];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) post: (NSString *)url then: (MMHTTPClientCallback)callback
|
- (MMHTTPRequest *) post: (NSString *)url then: (MMHTTPCallback)callback
|
||||||
{
|
{
|
||||||
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
|
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
|
||||||
@"POST", @"method",
|
@"POST", @"method",
|
||||||
url, @"url",
|
url, @"url",
|
||||||
nil];
|
nil];
|
||||||
[self request: options then: callback];
|
return [self request: options then: callback];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) post: (NSString *)url data: (NSData *)data then: (MMHTTPClientCallback)callback
|
- (MMHTTPRequest *) post: (NSString *)url data: (NSData *)data then: (MMHTTPCallback)callback
|
||||||
{
|
{
|
||||||
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
|
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
|
||||||
@"POST", @"method",
|
@"POST", @"method",
|
||||||
url, @"url",
|
url, @"url",
|
||||||
data, @"data",
|
data, @"data",
|
||||||
nil];
|
nil];
|
||||||
[self request: options then: callback];
|
return [self request: options then: callback];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) put: (NSString *)url data: (NSData *)data then: (MMHTTPClientCallback)callback
|
- (MMHTTPRequest *) put: (NSString *)url data: (NSData *)data then: (MMHTTPCallback)callback
|
||||||
{
|
{
|
||||||
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
|
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
|
||||||
@"PUT", @"method",
|
@"PUT", @"method",
|
||||||
url, @"url",
|
url, @"url",
|
||||||
data, @"data",
|
data, @"data",
|
||||||
nil];
|
nil];
|
||||||
[self request: options then: callback];
|
return [self request: options then: callback];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) delete: (NSString *)url then: (MMHTTPClientCallback)callback
|
- (MMHTTPRequest *) delete: (NSString *)url then: (MMHTTPCallback)callback
|
||||||
{
|
{
|
||||||
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
|
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
|
||||||
@"DELETE", @"method",
|
@"DELETE", @"method",
|
||||||
url, @"url",
|
url, @"url",
|
||||||
nil];
|
nil];
|
||||||
[self request: options then: callback];
|
return [self request: options then: callback];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) request: (NSDictionary *)options then: (MMHTTPClientCallback)callback
|
- (MMHTTPRequest *) request: (NSDictionary *)options then: (MMHTTPCallback)callback
|
||||||
{
|
{
|
||||||
NSString *urlString = [options valueForKey: @"url"];
|
NSString *url = [options objectForKey: @"url"];
|
||||||
NSString *method = [options valueForKey: @"method"];
|
if (_baseURL && !([url hasPrefix: @"http:"] || [url hasPrefix: @"https:"])) {
|
||||||
NSData *data = [options valueForKey: @"data"];
|
NSMutableDictionary *mutableOptions = [options mutableCopy];
|
||||||
NSDictionary *headers = [options valueForKey: @"headers"];
|
[mutableOptions setObject: [self urlWithPath: url] forKey: @"url"];
|
||||||
NSString *type = [options valueForKey: @"type"];
|
options = [NSDictionary dictionaryWithDictionary: mutableOptions];
|
||||||
|
|
||||||
if (!method) method = @"GET";
|
|
||||||
|
|
||||||
if (![[urlString substringToIndex: 5] isEqualToString: @"http:"]
|
|
||||||
&& ![[urlString substringToIndex: 6] isEqualToString: @"https:"])
|
|
||||||
{
|
|
||||||
urlString = [self urlWithPath: urlString];
|
|
||||||
}
|
}
|
||||||
NSURL *url = [NSURL URLWithString: urlString];
|
NSUInteger timeout = [[options objectForKey: @"timeout"] unsignedIntValue];
|
||||||
|
if (timeout == 0) {
|
||||||
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL: url
|
[options setValue: [NSNumber numberWithUnsignedInt: self.timeout] forKey: @"timeout"];
|
||||||
cachePolicy: NSURLRequestUseProtocolCachePolicy
|
|
||||||
timeoutInterval: self.timeout];
|
|
||||||
[request setHTTPMethod: method];
|
|
||||||
|
|
||||||
if (data && ([method isEqualToString: @"POST"] || [method isEqualToString: @"PUT"])) {
|
|
||||||
[request setHTTPBody: data];
|
|
||||||
}
|
}
|
||||||
|
return [MMHTTPRequest requestWithOptions: options callback: callback];
|
||||||
if (headers) {
|
|
||||||
for (NSString *key in headers) {
|
|
||||||
[request setValue: [headers objectForKey: key] forHTTPHeaderField: key];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
NSURLConnection *connection = [NSURLConnection connectionWithRequest: request delegate: self];
|
|
||||||
NSString *key = [connection description];
|
|
||||||
[_callbacks setObject: [[callback copy] autorelease] forKey: [connection description]];
|
|
||||||
[_connections setObject: connection forKey: key];
|
|
||||||
if (type) [_types setObject: type forKey: key];
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#pragma mark - NSURLConnection delegate methods
|
|
||||||
|
|
||||||
- (void) connection: (NSURLConnection *)connection didReceiveResponse: (NSURLResponse *)response
|
|
||||||
{
|
|
||||||
NSString *key = [connection description];
|
|
||||||
NSNumber *status;
|
|
||||||
NSDictionary *headers;
|
|
||||||
|
|
||||||
if ([response respondsToSelector :@selector(statusCode)])
|
|
||||||
{
|
|
||||||
status = [NSNumber numberWithInt: [(NSHTTPURLResponse *)response statusCode]];
|
|
||||||
headers = [(NSHTTPURLResponse *)response allHeaderFields];
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
NSLog(@"Not an HTTP response? connection: %@ response: %@", connection, response);
|
|
||||||
status = [NSNumber numberWithInt: 500];
|
|
||||||
headers = [NSDictionary dictionary];
|
|
||||||
}
|
|
||||||
|
|
||||||
[_statusCodes setObject: status forKey: key];
|
|
||||||
[_headers setObject: headers forKey: key];
|
|
||||||
[_data setObject: [[[NSMutableData alloc] init] autorelease] forKey: key];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void) connection: (NSURLConnection *)connection didReceiveData: (NSData *)data
|
|
||||||
{
|
|
||||||
[[_data objectForKey: [connection description]] appendData: data];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void) connection: (NSURLConnection *)connection didFailWithError: (NSError *)error
|
|
||||||
{
|
|
||||||
NSString *key = [connection description];
|
|
||||||
MMHTTPClientCallback callback = [_callbacks objectForKey: key];
|
|
||||||
|
|
||||||
callback(MMHTTPClientStatusError, nil);
|
|
||||||
|
|
||||||
[_statusCodes removeObjectForKey: key];
|
|
||||||
[_callbacks removeObjectForKey: key];
|
|
||||||
[_data removeObjectForKey: key];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void) connectionDidFinishLoading: (NSURLConnection *)connection
|
|
||||||
{
|
|
||||||
NSString *key = [connection description];
|
|
||||||
MMHTTPClientCallback callback = [_callbacks objectForKey: key];
|
|
||||||
int status = [[_statusCodes objectForKey: key] intValue];
|
|
||||||
NSString *type = [_types objectForKey: key];
|
|
||||||
id data = nil;
|
|
||||||
if (status == 200) {
|
|
||||||
if ([type isEqualToString: @"text"]) {
|
|
||||||
NSData *rawData = [_data objectForKey: key];
|
|
||||||
data = [[[NSString alloc] initWithBytes: rawData.bytes
|
|
||||||
length: rawData.length
|
|
||||||
encoding: NSUTF8StringEncoding] autorelease];
|
|
||||||
}
|
|
||||||
else if ([type isEqualToString: @"image"]) {
|
|
||||||
data = [UIImage imageWithData: [_data objectForKey: key]];
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
data = [_data objectForKey: key];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
callback(status, data);
|
|
||||||
|
|
||||||
[_callbacks removeObjectForKey: key];
|
|
||||||
[_connections removeObjectForKey: key];
|
|
||||||
[_data removeObjectForKey: key];
|
|
||||||
[_headers removeObjectForKey: key];
|
|
||||||
[_statusCodes removeObjectForKey: key];
|
|
||||||
[_types removeObjectForKey: key];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) dealloc
|
- (void) dealloc
|
||||||
{
|
{
|
||||||
for (NSURLConnection *conn in _connections) {
|
|
||||||
[conn cancel];
|
|
||||||
}
|
|
||||||
|
|
||||||
[_baseURL release];
|
[_baseURL release];
|
||||||
[_callbacks release];
|
|
||||||
[_connections release];
|
|
||||||
[_data release];
|
|
||||||
[_headers release];
|
|
||||||
[_statusCodes release];
|
|
||||||
[_types release];
|
|
||||||
[super dealloc];
|
[super dealloc];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
43
Marshmallows/MMHTTPRequest.h
Normal file
43
Marshmallows/MMHTTPRequest.h
Normal file
|
|
@ -0,0 +1,43 @@
|
||||||
|
//
|
||||||
|
// MMHTTPRequest.h
|
||||||
|
// Marshmallows
|
||||||
|
//
|
||||||
|
// Created by Sami Samhuri on 11-09-03.
|
||||||
|
// Copyright 2011 Guru Logic. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
#import <UIKit/UIImage.h>
|
||||||
|
|
||||||
|
#define MMHTTPRequestStatusError -1
|
||||||
|
#define MMHTTPRequestDefaultTimeout 120
|
||||||
|
|
||||||
|
typedef void (^MMHTTPCallback)(NSInteger status, id data);
|
||||||
|
typedef void (^MMHTTPTextCallback)(NSInteger status, NSString *text);
|
||||||
|
typedef void (^MMHTTPImageCallback)(NSInteger status, UIImage *image);
|
||||||
|
|
||||||
|
@interface MMHTTPRequest : NSObject
|
||||||
|
{
|
||||||
|
NSMutableData *_responseData;
|
||||||
|
}
|
||||||
|
|
||||||
|
@property (nonatomic, retain) NSURLConnection *connection;
|
||||||
|
@property (nonatomic, retain) NSMutableURLRequest *request;
|
||||||
|
@property (nonatomic, retain) NSString *method;
|
||||||
|
@property (nonatomic, retain) NSString *url;
|
||||||
|
@property (nonatomic, retain) NSMutableDictionary *headers;
|
||||||
|
@property (nonatomic, retain) NSData *data;
|
||||||
|
@property (nonatomic, retain) NSString *type;
|
||||||
|
@property (nonatomic, retain) MMHTTPCallback callback;
|
||||||
|
@property NSUInteger timeout;
|
||||||
|
@property (readonly) NSInteger statusCode;
|
||||||
|
@property (readonly) NSDictionary *responseHeaders;
|
||||||
|
@property (readonly) NSData *responseData;
|
||||||
|
@property (readonly) NSString *responseText;
|
||||||
|
@property (readonly) UIImage *responseImage;
|
||||||
|
|
||||||
|
+ (id) requestWithOptions: (NSDictionary *)options callback: (MMHTTPCallback)callback;
|
||||||
|
- (id) initWithOptions: (NSDictionary *)options callback: (MMHTTPCallback)callback;
|
||||||
|
- (void) cancel;
|
||||||
|
|
||||||
|
@end
|
||||||
158
Marshmallows/MMHTTPRequest.m
Normal file
158
Marshmallows/MMHTTPRequest.m
Normal file
|
|
@ -0,0 +1,158 @@
|
||||||
|
//
|
||||||
|
// MMHTTPRequest.m
|
||||||
|
// Marshmallows
|
||||||
|
//
|
||||||
|
// Created by Sami Samhuri on 11-09-03.
|
||||||
|
// Copyright 2011 Guru Logic. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "MMHTTPRequest.h"
|
||||||
|
|
||||||
|
@interface MMHTTPRequest ()
|
||||||
|
- (void) _start;
|
||||||
|
@end
|
||||||
|
|
||||||
|
|
||||||
|
@implementation MMHTTPRequest
|
||||||
|
|
||||||
|
@synthesize connection = _connection;
|
||||||
|
@synthesize request = _request;
|
||||||
|
@synthesize method = _method;
|
||||||
|
@synthesize url = _url;
|
||||||
|
@synthesize headers = _headers;
|
||||||
|
@synthesize data = _data;
|
||||||
|
@synthesize type = _type;
|
||||||
|
@synthesize callback = _callback;
|
||||||
|
@synthesize timeout = _timeout;
|
||||||
|
@synthesize statusCode = _statusCode;
|
||||||
|
@synthesize responseHeaders = _responseHeaders;
|
||||||
|
|
||||||
|
+ (id) requestWithOptions: (NSDictionary *)options callback: (MMHTTPCallback)callback
|
||||||
|
{
|
||||||
|
return [[[self alloc] initWithOptions: options callback: callback] autorelease];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (id) initWithOptions: (NSDictionary *)options callback: (MMHTTPCallback)callback
|
||||||
|
{
|
||||||
|
self = [super init];
|
||||||
|
if (self) {
|
||||||
|
self.callback = [callback copy];
|
||||||
|
self.timeout = MMHTTPRequestDefaultTimeout;
|
||||||
|
self.method = [options objectForKey: @"method"];
|
||||||
|
self.url = [options objectForKey: @"url"];
|
||||||
|
self.headers = [options objectForKey: @"headers"];
|
||||||
|
self.data = [options objectForKey: @"data"];
|
||||||
|
self.type = [options objectForKey: @"type"];
|
||||||
|
if (!self.method) self.method = @"GET";
|
||||||
|
[self _start];
|
||||||
|
}
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void) cancel
|
||||||
|
{
|
||||||
|
[_connection cancel];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSData *) responseData
|
||||||
|
{
|
||||||
|
return [NSData dataWithData: _responseData];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSString *) responseText
|
||||||
|
{
|
||||||
|
return [[[NSString alloc] initWithBytes: _responseData.bytes
|
||||||
|
length: _responseData.length
|
||||||
|
encoding: NSUTF8StringEncoding] autorelease];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (UIImage *) responseImage
|
||||||
|
{
|
||||||
|
return [UIImage imageWithData: _responseData];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void) _start
|
||||||
|
{
|
||||||
|
self.request = [NSMutableURLRequest requestWithURL: [NSURL URLWithString: self.url]
|
||||||
|
cachePolicy: NSURLRequestUseProtocolCachePolicy
|
||||||
|
timeoutInterval: self.timeout];
|
||||||
|
[self.request setHTTPMethod: self.method];
|
||||||
|
|
||||||
|
if (self.data && ([self.method isEqualToString: @"POST"] || [self.method isEqualToString: @"PUT"])) {
|
||||||
|
[self.request setHTTPBody: self.data];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (self.headers) {
|
||||||
|
for (NSString *key in self.headers) {
|
||||||
|
[self.request setValue: [self.headers objectForKey: key] forHTTPHeaderField: key];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
self.connection = [NSURLConnection connectionWithRequest: self.request delegate: self];
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - NSURLConnection delegate methods
|
||||||
|
|
||||||
|
- (void) connection: (NSURLConnection *)connection didReceiveResponse: (NSURLResponse *)response
|
||||||
|
{
|
||||||
|
if ([response respondsToSelector: @selector(statusCode)])
|
||||||
|
{
|
||||||
|
_statusCode = [(NSHTTPURLResponse *)response statusCode];
|
||||||
|
_responseHeaders = [[(NSHTTPURLResponse *)response allHeaderFields] retain];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
NSLog(@"Not an HTTP response? connection: %@ response: %@", connection, response);
|
||||||
|
_statusCode = 500;
|
||||||
|
_responseHeaders = [[NSDictionary alloc] init];
|
||||||
|
}
|
||||||
|
|
||||||
|
_responseData = [[NSMutableData alloc] init];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void) connection: (NSURLConnection *)connection didReceiveData: (NSData *)data
|
||||||
|
{
|
||||||
|
[_responseData appendData: data];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void) connection: (NSURLConnection *)connection didFailWithError: (NSError *)error
|
||||||
|
{
|
||||||
|
[_responseData release];
|
||||||
|
_responseData = nil;
|
||||||
|
_statusCode = MMHTTPRequestStatusError;
|
||||||
|
self.callback(self.statusCode, nil);
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void) connectionDidFinishLoading: (NSURLConnection *)connection
|
||||||
|
{
|
||||||
|
id data = nil;
|
||||||
|
if (self.statusCode == 200) {
|
||||||
|
if ([self.type isEqualToString: @"text"]) {
|
||||||
|
data = self.responseText;
|
||||||
|
}
|
||||||
|
else if ([self.type isEqualToString: @"image"]) {
|
||||||
|
data = self.responseImage;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
data = self.responseData;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
self.callback(self.statusCode, data);
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void) dealloc
|
||||||
|
{
|
||||||
|
[_connection release];
|
||||||
|
[_request release];
|
||||||
|
[_method release];
|
||||||
|
[_url release];
|
||||||
|
[_headers release];
|
||||||
|
[_data release];
|
||||||
|
[_type release];
|
||||||
|
[_callback release];
|
||||||
|
[_responseHeaders release];
|
||||||
|
[_responseData release];
|
||||||
|
[super dealloc];
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
Loading…
Reference in a new issue