Skip to content

Commit 9b10cab

Browse files
committed
Execute acks sync. Implement #950
1 parent 1e29b20 commit 9b10cab

File tree

5 files changed

+11
-22
lines changed

5 files changed

+11
-22
lines changed

.swift-version

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
4.0.2
1+
system

Source/SocketIO/Ack/SocketAckEmitter.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -121,9 +121,9 @@ public final class OnAckCallback : NSObject {
121121
guard seconds != 0 else { return }
122122

123123
socket.manager?.handleQueue.asyncAfter(deadline: DispatchTime.now() + seconds) {[weak socket] in
124-
guard let socket = socket, let manager = socket.manager else { return }
124+
guard let socket = socket else { return }
125125

126-
socket.ackHandlers.timeoutAck(self.ackNumber, onQueue: manager.handleQueue)
126+
socket.ackHandlers.timeoutAck(self.ackNumber)
127127
}
128128
}
129129

Source/SocketIO/Ack/SocketAckManager.swift

Lines changed: 4 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -60,29 +60,18 @@ private struct SocketAck : Hashable {
6060

6161
struct SocketAckManager {
6262
private var acks = Set<SocketAck>(minimumCapacity: 1)
63-
private let ackSemaphore = DispatchSemaphore(value: 1)
6463

6564
mutating func addAck(_ ack: Int, callback: @escaping AckCallback) {
6665
acks.insert(SocketAck(ack: ack, callback: callback))
6766
}
6867

6968
/// Should be called on handle queue
70-
mutating func executeAck(_ ack: Int, with items: [Any], onQueue: DispatchQueue) {
71-
ackSemaphore.wait()
72-
defer { ackSemaphore.signal() }
73-
let ack = acks.remove(SocketAck(ack: ack))
74-
75-
onQueue.async() { ack?.callback(items) }
69+
mutating func executeAck(_ ack: Int, with items: [Any]) {
70+
acks.remove(SocketAck(ack: ack))?.callback(items)
7671
}
7772

7873
/// Should be called on handle queue
79-
mutating func timeoutAck(_ ack: Int, onQueue: DispatchQueue) {
80-
ackSemaphore.wait()
81-
defer { ackSemaphore.signal() }
82-
let ack = acks.remove(SocketAck(ack: ack))
83-
84-
onQueue.async() {
85-
ack?.callback?([SocketAckStatus.noAck.rawValue])
86-
}
74+
mutating func timeoutAck(_ ack: Int) {
75+
acks.remove(SocketAck(ack: ack))?.callback?([SocketAckStatus.noAck.rawValue])
8776
}
8877
}

Source/SocketIO/Client/SocketIOClient.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -314,11 +314,11 @@ open class SocketIOClient : NSObject, SocketIOClientSpec {
314314
/// - parameter data: The data sent back with this ack.
315315
@objc
316316
open func handleAck(_ ack: Int, data: [Any]) {
317-
guard status == .connected, let manager = self.manager else { return }
317+
guard status == .connected else { return }
318318

319319
DefaultSocketLogger.Logger.log("Handling ack: \(ack) with data: \(data)", type: logType)
320320

321-
ackHandlers.executeAck(ack, with: data, onQueue: manager.handleQueue)
321+
ackHandlers.executeAck(ack, with: data)
322322
}
323323

324324
/// Called on socket.io specific events.

Tests/TestSocketIO/SocketAckManagerTest.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ class SocketAckManagerTest : XCTestCase {
2121
}
2222

2323
ackManager.addAck(1, callback: callback)
24-
ackManager.executeAck(1, with: itemsArray, onQueue: DispatchQueue.main)
24+
ackManager.executeAck(1, with: itemsArray)
2525

2626
waitForExpectations(timeout: 3.0, handler: nil)
2727
}
@@ -44,7 +44,7 @@ class SocketAckManagerTest : XCTestCase {
4444
}
4545

4646
ackManager.addAck(1, callback: callback)
47-
ackManager.timeoutAck(1, onQueue: DispatchQueue.main)
47+
ackManager.timeoutAck(1)
4848

4949
waitForExpectations(timeout: 0.2, handler: nil)
5050
}

0 commit comments

Comments
 (0)