Merge branch 'timeouts' into 1.2

This commit is contained in:
Erik 2015-03-16 09:01:49 -04:00
commit 7765e57a11
2 changed files with 20 additions and 3 deletions

View File

@ -103,7 +103,8 @@ socket.on("ackEvent") {data, ack in
println("Got int") println("Got int")
} }
socket.emitWithAck("ackTest", "test").onAck {data in // You can specify a custom timeout interval. 0 means no timeout.
socket.emitWithAck("ackTest", "test").onAck(0) {data in
println(data?[0]) println(data?[0])
} }

View File

@ -29,6 +29,7 @@ public typealias AckCallback = (NSArray?) -> Void
@objc public class SocketAckHandler { @objc public class SocketAckHandler {
let ackNum:Int! let ackNum:Int!
let event:String! let event:String!
var acked = false
var callback:AckCallback? var callback:AckCallback?
init(event:String, ackNum:Int = 0) { init(event:String, ackNum:Int = 0) {
@ -36,12 +37,27 @@ public typealias AckCallback = (NSArray?) -> Void
self.event = event self.event = event
} }
func onAck(callback:AckCallback) { public func onAck(timeout:UInt64, withCallback callback:AckCallback) {
self.callback = callback self.callback = callback
if timeout != 0 {
let time = dispatch_time(DISPATCH_TIME_NOW, Int64(timeout * NSEC_PER_SEC))
dispatch_after(time, dispatch_get_main_queue()) {[weak self] in
if self == nil {
return
}
if !self!.acked {
self?.executeAck(["No ACK"])
}
}
}
} }
func executeAck(data:NSArray?) { func executeAck(data:NSArray?) {
dispatch_async(dispatch_get_main_queue()) {[cb = self.callback] in dispatch_async(dispatch_get_main_queue()) {[weak self, cb = self.callback] in
self?.acked = true
cb?(data) cb?(data)
return return
} }