Skip to content

Commit 60cc11d

Browse files
committed
'Cancel' for PromiseKit -- provides the ability to cancel promises and promise chains
1 parent e116b21 commit 60cc11d

File tree

4 files changed

+26
-13
lines changed

4 files changed

+26
-13
lines changed

Cartfile

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
1-
github "mxcl/PromiseKit" ~> 6.0
1+
#github "mxcl/PromiseKit" ~> 6.0
2+
github "dougzilla32/PromiseKit" "CoreCancel"

Cartfile.resolved

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
github "mxcl/PromiseKit" "6.3.3"
1+
github "dougzilla32/PromiseKit" "ff694600d4d03458121515bdc027ba76df14f7ef"

PMKSystemConfiguration.xcodeproj/project.pbxproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
6362F84F1D5D934C0021D2DD /* SCNetworkReachability+AnyPromise.m in Sources */ = {isa = PBXBuildFile; fileRef = 6362F84D1D5D934C0021D2DD /* SCNetworkReachability+AnyPromise.m */; };
1313
6383E14B1D611E0D00897651 /* SCTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6383E14A1D611E0D00897651 /* SCTests.swift */; };
1414
63C7FFF71D5C020D003BAE60 /* PMKSystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 63C7FFA71D5BEE09003BAE60 /* PMKSystemConfiguration.framework */; };
15+
911E6FC820F578E2006F49B9 /* SCNetworkReachability+Promise.swift in Sources */ = {isa = PBXBuildFile; fileRef = 911E6FC720F578E2006F49B9 /* SCNetworkReachability+Promise.swift */; };
1516
/* End PBXBuildFile section */
1617

1718
/* Begin PBXContainerItemProxy section */
@@ -34,6 +35,7 @@
3435
63C7FFF21D5C020D003BAE60 /* PMKSCTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = PMKSCTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
3536
63CCF8121D5C0C4E00503216 /* Cartfile */ = {isa = PBXFileReference; lastKnownFileType = text; path = Cartfile; sourceTree = "<group>"; };
3637
63CCF8171D5C11B500503216 /* Carthage.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Carthage.xcconfig; sourceTree = "<group>"; };
38+
911E6FC720F578E2006F49B9 /* SCNetworkReachability+Promise.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "SCNetworkReachability+Promise.swift"; sourceTree = "<group>"; };
3739
/* End PBXFileReference section */
3840

3941
/* Begin PBXFrameworksBuildPhase section */
@@ -82,6 +84,7 @@
8284
6358AB791D5D4B6700B9B157 /* PMKSystemConfiguration.h */,
8385
6362F84C1D5D934C0021D2DD /* SCNetworkReachability+AnyPromise.h */,
8486
6362F84D1D5D934C0021D2DD /* SCNetworkReachability+AnyPromise.m */,
87+
911E6FC720F578E2006F49B9 /* SCNetworkReachability+Promise.swift */,
8588
);
8689
path = Sources;
8790
sourceTree = "<group>";
@@ -208,6 +211,7 @@
208211
buildActionMask = 2147483647;
209212
files = (
210213
6362F84F1D5D934C0021D2DD /* SCNetworkReachability+AnyPromise.m in Sources */,
214+
911E6FC820F578E2006F49B9 /* SCNetworkReachability+Promise.swift in Sources */,
211215
);
212216
runOnlyForDeploymentPostprocessing = 0;
213217
};

Sources/SCNetworkReachability+Promise.swift

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9,23 +9,31 @@ public extension SCNetworkReachability {
99

1010
static func promise() -> Promise<Void> {
1111
do {
12-
var zeroAddress = sockaddr()
13-
zeroAddress.sa_len = UInt8(MemoryLayout<sockaddr>.size)
14-
zeroAddress.sa_family = sa_family_t(AF_INET)
15-
guard let ref = SCNetworkReachabilityCreateWithAddress(nil, &zeroAddress) else {
16-
throw PMKError.couldNotInitializeReachability
17-
}
18-
19-
var flags = SCNetworkReachabilityFlags()
20-
if SCNetworkReachabilityGetFlags(ref, &flags), flags.contains(.reachable) {
12+
if let promise = try pending()?.promise {
13+
return promise
14+
} else {
2115
return Promise()
2216
}
23-
24-
return try Helper(ref: ref).pending.promise
2517
} catch {
2618
return Promise(error: error)
2719
}
2820
}
21+
22+
fileprivate static func pending() throws -> (promise: Promise<Void>, resolver: Resolver<Void>)? {
23+
var zeroAddress = sockaddr()
24+
zeroAddress.sa_len = UInt8(MemoryLayout<sockaddr>.size)
25+
zeroAddress.sa_family = sa_family_t(AF_INET)
26+
guard let ref = SCNetworkReachabilityCreateWithAddress(nil, &zeroAddress) else {
27+
throw PMKError.couldNotInitializeReachability
28+
}
29+
30+
var flags = SCNetworkReachabilityFlags()
31+
if SCNetworkReachabilityGetFlags(ref, &flags), flags.contains(.reachable) {
32+
return nil
33+
}
34+
35+
return try Helper(ref: ref).pending
36+
}
2937
}
3038

3139
private func callback(reachability: SCNetworkReachability, flags: SCNetworkReachabilityFlags, info: UnsafeMutableRawPointer?) {

0 commit comments

Comments
 (0)