Skip to content

Commit efefecd

Browse files
authored
Merge pull request #622 from Sistemium/development
thread-safe ack generation
2 parents cce88ae + fcb2b6b commit efefecd

File tree

1 file changed

+9
-3
lines changed

1 file changed

+9
-3
lines changed

Source/SocketIOClient.swift

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ public final class SocketIOClient : NSObject, SocketEngineClient, SocketParsable
5454
private var handlers = [SocketEventHandler]()
5555
private var reconnecting = false
5656

57+
private let ackSemaphore = DispatchSemaphore(value: 1)
5758
private(set) var currentAck = -1
5859
private(set) var handleQueue = DispatchQueue.main
5960
private(set) var reconnectAttempts = -1
@@ -161,10 +162,15 @@ public final class SocketIOClient : NSObject, SocketEngineClient, SocketParsable
161162
}
162163
}
163164

164-
private func createOnAck(_ items: [Any]) -> OnAckCallback {
165+
private func nextAck() -> Int {
166+
ackSemaphore.wait()
167+
defer { ackSemaphore.signal() }
165168
currentAck += 1
166-
167-
return OnAckCallback(ackNumber: currentAck, items: items, socket: self)
169+
return currentAck
170+
}
171+
172+
private func createOnAck(_ items: [Any]) -> OnAckCallback {
173+
return OnAckCallback(ackNumber: nextAck(), items: items, socket: self)
168174
}
169175

170176
func didConnect() {

0 commit comments

Comments
 (0)