diff --git a/README.md b/README.md index 63b0744..d197693 100644 --- a/README.md +++ b/README.md @@ -103,7 +103,8 @@ socket.on("ackEvent") {data, ack in 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]) } diff --git a/SwiftIO/SocketAckHandler.swift b/SwiftIO/SocketAckHandler.swift index e042020..a5ab0d0 100644 --- a/SwiftIO/SocketAckHandler.swift +++ b/SwiftIO/SocketAckHandler.swift @@ -40,14 +40,17 @@ public typealias AckCallback = (NSArray?) -> Void public func onAck(timeout:UInt64, withCallback callback:AckCallback) { self.callback = callback - 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"]) + + 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"]) + } } } } diff --git a/SwiftIO/SocketIOClient.swift b/SwiftIO/SocketIOClient.swift index f160e64..2e28c67 100644 --- a/SwiftIO/SocketIOClient.swift +++ b/SwiftIO/SocketIOClient.swift @@ -50,7 +50,7 @@ public class SocketIOClient: NSObject { internal var currentAck = -1 internal var waitingData = [SocketEvent]() - + public var closed:Bool { return self._closed } @@ -396,6 +396,7 @@ public class SocketIOClient: NSObject { if self.reconnectTimer == nil { self._reconnecting = true + dispatch_async(dispatch_get_main_queue()) {[weak self] in if self == nil { return