diff --git a/DXHTTPKit.xcodeproj/project.pbxproj b/DXHTTPKit.xcodeproj/project.pbxproj index 457861f..c32a849 100644 --- a/DXHTTPKit.xcodeproj/project.pbxproj +++ b/DXHTTPKit.xcodeproj/project.pbxproj @@ -13,6 +13,9 @@ ADFB0AD4162C99AB00AC5954 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ADFB0AC1162C99AB00AC5954 /* Foundation.framework */; }; ADFB0AD7162C99AB00AC5954 /* libDXHTTPKit.a in Frameworks */ = {isa = PBXBuildFile; fileRef = ADFB0ABE162C99AB00AC5954 /* libDXHTTPKit.a */; }; ADFB0ADD162C99AB00AC5954 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = ADFB0ADB162C99AB00AC5954 /* InfoPlist.strings */; }; + D95AACDC163593F200FFD2C1 /* DXHTTPConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = D95AACDB163593F200FFD2C1 /* DXHTTPConnection.m */; }; + D95AACEC16359C8400FFD2C1 /* DXHTTPConnectionOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = D95AACE816359C8400FFD2C1 /* DXHTTPConnectionOperation.m */; }; + D95AACED16359C8400FFD2C1 /* DXHTTPConnectionThread.m in Sources */ = {isa = PBXBuildFile; fileRef = D95AACEB16359C8400FFD2C1 /* DXHTTPConnectionThread.m */; }; D9D0547B1632ADA60044A2F9 /* DXHTTPFormBodyStreamBuilderSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = D9D0547A1632ADA60044A2F9 /* DXHTTPFormBodyStreamBuilderSpec.m */; }; EA07F9881634299100376BD3 /* DXHTTPKitErrors.m in Sources */ = {isa = PBXBuildFile; fileRef = EA07F9871634299100376BD3 /* DXHTTPKitErrors.m */; }; EA07F98B16342AD600376BD3 /* DXHTTPFormBodyStreamBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = EA07F98A16342AD600376BD3 /* DXHTTPFormBodyStreamBuilder.m */; }; @@ -68,6 +71,11 @@ ADFB0AD0162C99AB00AC5954 /* SenTestingKit.framework */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = wrapper.framework; name = SenTestingKit.framework; path = Library/Frameworks/SenTestingKit.framework; sourceTree = DEVELOPER_DIR; }; ADFB0ADA162C99AB00AC5954 /* DXHTTPKitTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "DXHTTPKitTests-Info.plist"; sourceTree = ""; }; ADFB0ADC162C99AB00AC5954 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; + D95AACDB163593F200FFD2C1 /* DXHTTPConnection.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DXHTTPConnection.m; sourceTree = ""; }; + D95AACE716359C8400FFD2C1 /* DXHTTPConnectionOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DXHTTPConnectionOperation.h; sourceTree = ""; }; + D95AACE816359C8400FFD2C1 /* DXHTTPConnectionOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DXHTTPConnectionOperation.m; sourceTree = ""; }; + D95AACEA16359C8400FFD2C1 /* DXHTTPConnectionThread.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DXHTTPConnectionThread.h; sourceTree = ""; }; + D95AACEB16359C8400FFD2C1 /* DXHTTPConnectionThread.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DXHTTPConnectionThread.m; sourceTree = ""; }; D9D0547A1632ADA60044A2F9 /* DXHTTPFormBodyStreamBuilderSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DXHTTPFormBodyStreamBuilderSpec.m; sourceTree = ""; }; D9D0547D1632B4390044A2F9 /* DXHTTPFormBodyStreamBuilder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DXHTTPFormBodyStreamBuilder.h; sourceTree = ""; }; D9D054821632B7180044A2F9 /* DXHTTPFormPartElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DXHTTPFormPartElement.h; path = DXHTTPFormFileElement/DXHTTPFormPartElement.h; sourceTree = ""; }; @@ -138,6 +146,7 @@ EAB5F43B162D869900A7E403 /* DXHTTPFormFileDescriptorSpec.m */, EA76B4F71630A9ED004B85CA /* DXHTTPHeadersBuilderSpec.m */, EA3EB4F21631963500547FED /* DXHTTPFormParamsBuilderSpec.m */, + D95AACDB163593F200FFD2C1 /* DXHTTPConnection.m */, ); path = Specs; sourceTree = ""; @@ -192,6 +201,7 @@ ADE7EE3F162CA7E10061F3F8 /* Base */ = { isa = PBXGroup; children = ( + D95AACE516359C8400FFD2C1 /* DXHTTPConnection */, EAB5F44C162D873E00A7E403 /* DXHTTPRequestDescriptor.h */, EAB5F44D162D873E00A7E403 /* DXHTTPRequestDescriptor.m */, EAB5F440162D86C700A7E403 /* DXHTTPParamKey.h */, @@ -279,6 +289,33 @@ path = ../DXHTTPFormFileBuilder; sourceTree = ""; }; + D95AACE516359C8400FFD2C1 /* DXHTTPConnection */ = { + isa = PBXGroup; + children = ( + D95AACE616359C8400FFD2C1 /* DXHTTPConnectionOperation */, + D95AACE916359C8400FFD2C1 /* DXHTTPConnectionThread */, + ); + path = DXHTTPConnection; + sourceTree = ""; + }; + D95AACE616359C8400FFD2C1 /* DXHTTPConnectionOperation */ = { + isa = PBXGroup; + children = ( + D95AACE716359C8400FFD2C1 /* DXHTTPConnectionOperation.h */, + D95AACE816359C8400FFD2C1 /* DXHTTPConnectionOperation.m */, + ); + path = DXHTTPConnectionOperation; + sourceTree = ""; + }; + D95AACE916359C8400FFD2C1 /* DXHTTPConnectionThread */ = { + isa = PBXGroup; + children = ( + D95AACEA16359C8400FFD2C1 /* DXHTTPConnectionThread.h */, + D95AACEB16359C8400FFD2C1 /* DXHTTPConnectionThread.m */, + ); + path = DXHTTPConnectionThread; + sourceTree = ""; + }; D9D054851632B71C0044A2F9 /* DXHTTPFormPartElement */ = { isa = PBXGroup; children = ( @@ -463,6 +500,8 @@ EA07F9881634299100376BD3 /* DXHTTPKitErrors.m in Sources */, EA07F98B16342AD600376BD3 /* DXHTTPFormBodyStreamBuilder.m in Sources */, EA28F38116345AF200D5D00A /* DXHTTPURLRequestAdditionalsBuilder.m in Sources */, + D95AACEC16359C8400FFD2C1 /* DXHTTPConnectionOperation.m in Sources */, + D95AACED16359C8400FFD2C1 /* DXHTTPConnectionThread.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -478,6 +517,7 @@ EA76B4F81630A9ED004B85CA /* DXHTTPHeadersBuilderSpec.m in Sources */, EA3EB4F31631963500547FED /* DXHTTPFormParamsBuilderSpec.m in Sources */, D9D0547B1632ADA60044A2F9 /* DXHTTPFormBodyStreamBuilderSpec.m in Sources */, + D95AACDC163593F200FFD2C1 /* DXHTTPConnection.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/DXHTTPKit/Code/Base/DXHTTPConnection/DXHTTPConnectionOperation/DXHTTPConnectionOperation.h b/DXHTTPKit/Code/Base/DXHTTPConnection/DXHTTPConnectionOperation/DXHTTPConnectionOperation.h new file mode 100644 index 0000000..b92ac9d --- /dev/null +++ b/DXHTTPKit/Code/Base/DXHTTPConnection/DXHTTPConnectionOperation/DXHTTPConnectionOperation.h @@ -0,0 +1,16 @@ +// +// DXHTTPConnectionOperation.h +// DXHTTPKit +// +// Created by dev2 on 10/22/12. +// Copyright (c) 2012 111Minutes. All rights reserved. +// + +#import +#import "DXHTTPConnectionThread.h" + +@interface DXHTTPConnectionOperation : NSOperation + +- (id)initWithURLRequest:(NSURLRequest *)aURLRequest; + +@end diff --git a/DXHTTPKit/Code/Base/DXHTTPConnection/DXHTTPConnectionOperation/DXHTTPConnectionOperation.m b/DXHTTPKit/Code/Base/DXHTTPConnection/DXHTTPConnectionOperation/DXHTTPConnectionOperation.m new file mode 100644 index 0000000..fc7670d --- /dev/null +++ b/DXHTTPKit/Code/Base/DXHTTPConnection/DXHTTPConnectionOperation/DXHTTPConnectionOperation.m @@ -0,0 +1,65 @@ +// +// DXHTTPConnectionOperation.m +// DXHTTPKit +// +// Created by dev2 on 10/22/12. +// Copyright (c) 2012 111Minutes. All rights reserved. +// + +#import "DXHTTPConnectionOperation.h" + +@interface DXHTTPConnectionOperation() { + NSURLRequest *_urlRequest; + NSURLConnection *_urlConnection; + NSMutableData *_connectionData; + NSMutableDictionary *_connectionResponseHeaders; + BOOL _executing; +} + +@end + +@implementation DXHTTPConnectionOperation + +- (id)initWithURLRequest:(NSURLRequest *)aURLRequest { + self = [super init]; + if (self) { + _urlRequest = aURLRequest; + _connectionData = [NSMutableData new]; + } + return self; +} + +- (void)start { + [self performSelector:@selector(connectionOpeartionDidStart) onThread:[DXHTTPConnectionThread requestConnectionThread] withObject:nil waitUntilDone:NO]; + +} + +- (void)connectionOpeartionDidStart { + _executing = YES; + _urlConnection = [[NSURLConnection alloc] initWithRequest:_urlRequest delegate:self]; + NSRunLoop *connectionRunLoop = [NSRunLoop currentRunLoop]; + [_urlConnection scheduleInRunLoop:connectionRunLoop forMode:NSRunLoopCommonModes]; + [_urlConnection start]; +} + +- (BOOL)isExecuting { + return _executing; +} + +- (BOOL)isConcurrent { + return YES; +} + +- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { + [_connectionData setLength:0]; +} + +- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { + [_connectionData appendData:data]; +} + +- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { + _executing = NO; +} + +@end diff --git a/DXHTTPKit/Code/Base/DXHTTPConnection/DXHTTPConnectionThread/DXHTTPConnectionThread.h b/DXHTTPKit/Code/Base/DXHTTPConnection/DXHTTPConnectionThread/DXHTTPConnectionThread.h new file mode 100644 index 0000000..8117b7a --- /dev/null +++ b/DXHTTPKit/Code/Base/DXHTTPConnection/DXHTTPConnectionThread/DXHTTPConnectionThread.h @@ -0,0 +1,15 @@ +// +// DXHTTPConnectionThread.h +// DXHTTPKit +// +// Created by dev2 on 10/22/12. +// Copyright (c) 2012 111Minutes. All rights reserved. +// + +#import + +@interface DXHTTPConnectionThread : NSObject + ++ (NSThread *)requestConnectionThread; + +@end diff --git a/DXHTTPKit/Code/Base/DXHTTPConnection/DXHTTPConnectionThread/DXHTTPConnectionThread.m b/DXHTTPKit/Code/Base/DXHTTPConnection/DXHTTPConnectionThread/DXHTTPConnectionThread.m new file mode 100644 index 0000000..3171ac8 --- /dev/null +++ b/DXHTTPKit/Code/Base/DXHTTPConnection/DXHTTPConnectionThread/DXHTTPConnectionThread.m @@ -0,0 +1,37 @@ +// +// DXHTTPConnectionThread.m +// DXHTTPKit +// +// Created by dev2 on 10/22/12. +// Copyright (c) 2012 111Minutes. All rights reserved. +// + +#import "DXHTTPConnectionThread.h" + +@interface DXHTTPConnectionThread() + +@end + +@implementation DXHTTPConnectionThread + +static NSThread *_connectionThread; + ++ (void)connectionThreadEntry:(id)object { + do { + @autoreleasepool { + [[NSRunLoop currentRunLoop] run]; + } + } while (YES); +} + ++ (NSThread *)requestConnectionThread { + static dispatch_once_t allocThreadOnce; + + dispatch_once(&allocThreadOnce, ^{ + _connectionThread = [[NSThread alloc] initWithTarget:self selector:@selector(connectionThreadEntry:) object:nil]; + [_connectionThread start]; + }); + return _connectionThread; +} + +@end diff --git a/DXHTTPKit/Code/Base/DXHTTPConnectionOperation.h b/DXHTTPKit/Code/Base/DXHTTPConnectionOperation.h new file mode 100644 index 0000000..9476ca1 --- /dev/null +++ b/DXHTTPKit/Code/Base/DXHTTPConnectionOperation.h @@ -0,0 +1,13 @@ +// +// DXHTTPConnectionOperation.h +// DXHTTPKit +// +// Created by dev2 on 10/22/12. +// Copyright (c) 2012 111Minutes. All rights reserved. +// + +#import + +@interface DXHTTPConnectionOperation : NSOperation + +@end diff --git a/DXHTTPKit/Code/Base/DXHTTPConnectionOperation.m b/DXHTTPKit/Code/Base/DXHTTPConnectionOperation.m new file mode 100644 index 0000000..90e9a31 --- /dev/null +++ b/DXHTTPKit/Code/Base/DXHTTPConnectionOperation.m @@ -0,0 +1,13 @@ +// +// DXHTTPConnectionOperation.m +// DXHTTPKit +// +// Created by dev2 on 10/22/12. +// Copyright (c) 2012 111Minutes. All rights reserved. +// + +#import "DXHTTPConnectionOperation.h" + +@implementation DXHTTPConnectionOperation + +@end diff --git a/DXHTTPKit/Code/Base/DXHTTPConnectionThread/DXHTTPConnectionThread.h b/DXHTTPKit/Code/Base/DXHTTPConnectionThread/DXHTTPConnectionThread.h new file mode 100644 index 0000000..220866b --- /dev/null +++ b/DXHTTPKit/Code/Base/DXHTTPConnectionThread/DXHTTPConnectionThread.h @@ -0,0 +1,13 @@ +// +// DXHTTPConnectionThread.h +// DXHTTPKit +// +// Created by dev2 on 10/22/12. +// Copyright (c) 2012 111Minutes. All rights reserved. +// + +#import + +@interface DXHTTPConnectionThread : NSObject + +@end diff --git a/DXHTTPKit/Code/Base/DXHTTPConnectionThread/DXHTTPConnectionThread.m b/DXHTTPKit/Code/Base/DXHTTPConnectionThread/DXHTTPConnectionThread.m new file mode 100644 index 0000000..98c73a8 --- /dev/null +++ b/DXHTTPKit/Code/Base/DXHTTPConnectionThread/DXHTTPConnectionThread.m @@ -0,0 +1,13 @@ +// +// DXHTTPConnectionThread.m +// DXHTTPKit +// +// Created by dev2 on 10/22/12. +// Copyright (c) 2012 111Minutes. All rights reserved. +// + +#import "DXHTTPConnectionThread.h" + +@implementation DXHTTPConnectionThread + +@end diff --git a/DXHTTPKitTests/Specs/DXHTTPConnection.h b/DXHTTPKitTests/Specs/DXHTTPConnection.h new file mode 100644 index 0000000..6618dda --- /dev/null +++ b/DXHTTPKitTests/Specs/DXHTTPConnection.h @@ -0,0 +1,13 @@ +// +// DXHTTPConnection.h +// DXHTTPKit +// +// Created by dev2 on 10/22/12. +// Copyright (c) 2012 111Minutes. All rights reserved. +// + +#import + +@interface DXHTTPConnection : NSObject + +@end diff --git a/DXHTTPKitTests/Specs/DXHTTPConnection.m b/DXHTTPKitTests/Specs/DXHTTPConnection.m new file mode 100644 index 0000000..fd95507 --- /dev/null +++ b/DXHTTPKitTests/Specs/DXHTTPConnection.m @@ -0,0 +1,14 @@ +#import "Kiwi.h" +#import "DXHTTPConnectionOperation.h" + +SPEC_BEGIN(DXHTTPConnectionSpec) + +describe(@"DXHTTPConnection", ^{ + it(@"Should start NSURLConnection in DXHTTPConnectionOperation", ^{ + NSURLRequest *urlRequest = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString:@"http://localhost"]]; + DXHTTPConnectionOperation *connectionOperation = [[DXHTTPConnectionOperation alloc] initWithURLRequest:urlRequest]; + [connectionOperation start]; + }); +}); + +SPEC_END \ No newline at end of file diff --git a/DXHTTPKitTests/Specs/DXHTTPConnectionSpec.m b/DXHTTPKitTests/Specs/DXHTTPConnectionSpec.m new file mode 100644 index 0000000..e69de29