From c17767111224390a1891fd21755af73da75a0a23 Mon Sep 17 00:00:00 2001 From: Erik Date: Sat, 14 Mar 2015 14:11:32 -0400 Subject: [PATCH] work on #23 --- SwiftIO/SocketAckHandler.swift | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/SwiftIO/SocketAckHandler.swift b/SwiftIO/SocketAckHandler.swift index bc506a0..e042020 100644 --- a/SwiftIO/SocketAckHandler.swift +++ b/SwiftIO/SocketAckHandler.swift @@ -29,6 +29,7 @@ public typealias AckCallback = (NSArray?) -> Void @objc public class SocketAckHandler { let ackNum:Int! let event:String! + var acked = false var callback:AckCallback? init(event:String, ackNum:Int = 0) { @@ -36,12 +37,24 @@ public typealias AckCallback = (NSArray?) -> Void self.event = event } - func onAck(callback:AckCallback) { + 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"]) + } + } } 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) return }