thread-safe ack generation

This commit is contained in:
Alexander Levin 2017-02-23 09:32:50 +02:00
parent cce88ae3eb
commit fcb2b6bbf6

View File

@ -54,6 +54,7 @@ public final class SocketIOClient : NSObject, SocketEngineClient, SocketParsable
private var handlers = [SocketEventHandler]() private var handlers = [SocketEventHandler]()
private var reconnecting = false private var reconnecting = false
private let ackSemaphore = DispatchSemaphore(value: 1)
private(set) var currentAck = -1 private(set) var currentAck = -1
private(set) var handleQueue = DispatchQueue.main private(set) var handleQueue = DispatchQueue.main
private(set) var reconnectAttempts = -1 private(set) var reconnectAttempts = -1
@ -161,10 +162,15 @@ public final class SocketIOClient : NSObject, SocketEngineClient, SocketParsable
} }
} }
private func createOnAck(_ items: [Any]) -> OnAckCallback { private func nextAck() -> Int {
ackSemaphore.wait()
defer { ackSemaphore.signal() }
currentAck += 1 currentAck += 1
return currentAck
return OnAckCallback(ackNumber: currentAck, items: items, socket: self) }
private func createOnAck(_ items: [Any]) -> OnAckCallback {
return OnAckCallback(ackNumber: nextAck(), items: items, socket: self)
} }
func didConnect() { func didConnect() {