Skip to content

Commit c177671

Browse files
committed
work on #23
1 parent 2cc68ae commit c177671

File tree

1 file changed

+15
-2
lines changed

1 file changed

+15
-2
lines changed

SwiftIO/SocketAckHandler.swift

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,19 +29,32 @@ public typealias AckCallback = (NSArray?) -> Void
2929
@objc public class SocketAckHandler {
3030
let ackNum:Int!
3131
let event:String!
32+
var acked = false
3233
var callback:AckCallback?
3334

3435
init(event:String, ackNum:Int = 0) {
3536
self.ackNum = ackNum
3637
self.event = event
3738
}
3839

39-
func onAck(callback:AckCallback) {
40+
public func onAck(timeout:UInt64, withCallback callback:AckCallback) {
4041
self.callback = callback
42+
43+
let time = dispatch_time(DISPATCH_TIME_NOW, Int64(timeout * NSEC_PER_SEC))
44+
dispatch_after(time, dispatch_get_main_queue()) {[weak self] in
45+
if self == nil {
46+
return
47+
}
48+
49+
if !self!.acked {
50+
self?.executeAck(["No ACK"])
51+
}
52+
}
4153
}
4254

4355
func executeAck(data:NSArray?) {
44-
dispatch_async(dispatch_get_main_queue()) {[cb = self.callback] in
56+
dispatch_async(dispatch_get_main_queue()) {[weak self, cb = self.callback] in
57+
self?.acked = true
4558
cb?(data)
4659
return
4760
}

0 commit comments

Comments
 (0)