diff --git a/.swift-version b/.swift-version index 4d54dad..bec3a35 100644 --- a/.swift-version +++ b/.swift-version @@ -1 +1 @@ -4.0.2 +system diff --git a/Source/SocketIO/Ack/SocketAckEmitter.swift b/Source/SocketIO/Ack/SocketAckEmitter.swift index 449d04e..a7c80be 100644 --- a/Source/SocketIO/Ack/SocketAckEmitter.swift +++ b/Source/SocketIO/Ack/SocketAckEmitter.swift @@ -121,9 +121,9 @@ public final class OnAckCallback : NSObject { guard seconds != 0 else { return } socket.manager?.handleQueue.asyncAfter(deadline: DispatchTime.now() + seconds) {[weak socket] in - guard let socket = socket, let manager = socket.manager else { return } + guard let socket = socket else { return } - socket.ackHandlers.timeoutAck(self.ackNumber, onQueue: manager.handleQueue) + socket.ackHandlers.timeoutAck(self.ackNumber) } } diff --git a/Source/SocketIO/Ack/SocketAckManager.swift b/Source/SocketIO/Ack/SocketAckManager.swift index cda3271..21fb009 100644 --- a/Source/SocketIO/Ack/SocketAckManager.swift +++ b/Source/SocketIO/Ack/SocketAckManager.swift @@ -60,29 +60,18 @@ private struct SocketAck : Hashable { struct SocketAckManager { private var acks = Set(minimumCapacity: 1) - private let ackSemaphore = DispatchSemaphore(value: 1) mutating func addAck(_ ack: Int, callback: @escaping AckCallback) { acks.insert(SocketAck(ack: ack, callback: callback)) } /// Should be called on handle queue - mutating func executeAck(_ ack: Int, with items: [Any], onQueue: DispatchQueue) { - ackSemaphore.wait() - defer { ackSemaphore.signal() } - let ack = acks.remove(SocketAck(ack: ack)) - - onQueue.async() { ack?.callback(items) } + mutating func executeAck(_ ack: Int, with items: [Any]) { + acks.remove(SocketAck(ack: ack))?.callback(items) } /// Should be called on handle queue - mutating func timeoutAck(_ ack: Int, onQueue: DispatchQueue) { - ackSemaphore.wait() - defer { ackSemaphore.signal() } - let ack = acks.remove(SocketAck(ack: ack)) - - onQueue.async() { - ack?.callback?([SocketAckStatus.noAck.rawValue]) - } + mutating func timeoutAck(_ ack: Int) { + acks.remove(SocketAck(ack: ack))?.callback?([SocketAckStatus.noAck.rawValue]) } } diff --git a/Source/SocketIO/Client/SocketIOClient.swift b/Source/SocketIO/Client/SocketIOClient.swift index b6515e6..76544b9 100644 --- a/Source/SocketIO/Client/SocketIOClient.swift +++ b/Source/SocketIO/Client/SocketIOClient.swift @@ -314,11 +314,11 @@ open class SocketIOClient : NSObject, SocketIOClientSpec { /// - parameter data: The data sent back with this ack. @objc open func handleAck(_ ack: Int, data: [Any]) { - guard status == .connected, let manager = self.manager else { return } + guard status == .connected else { return } DefaultSocketLogger.Logger.log("Handling ack: \(ack) with data: \(data)", type: logType) - ackHandlers.executeAck(ack, with: data, onQueue: manager.handleQueue) + ackHandlers.executeAck(ack, with: data) } /// Called on socket.io specific events. diff --git a/Tests/TestSocketIO/SocketAckManagerTest.swift b/Tests/TestSocketIO/SocketAckManagerTest.swift index 455c5b9..b4f7b5d 100644 --- a/Tests/TestSocketIO/SocketAckManagerTest.swift +++ b/Tests/TestSocketIO/SocketAckManagerTest.swift @@ -21,7 +21,7 @@ class SocketAckManagerTest : XCTestCase { } ackManager.addAck(1, callback: callback) - ackManager.executeAck(1, with: itemsArray, onQueue: DispatchQueue.main) + ackManager.executeAck(1, with: itemsArray) waitForExpectations(timeout: 3.0, handler: nil) } @@ -44,7 +44,7 @@ class SocketAckManagerTest : XCTestCase { } ackManager.addAck(1, callback: callback) - ackManager.timeoutAck(1, onQueue: DispatchQueue.main) + ackManager.timeoutAck(1) waitForExpectations(timeout: 0.2, handler: nil) }