Skip to content

Commit d811b19

Browse files
committed
Fix exclusive access issue
1 parent 9b10cab commit d811b19

File tree

3 files changed

+18
-5
lines changed

3 files changed

+18
-5
lines changed

Source/SocketIO/Ack/SocketAckManager.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -58,20 +58,20 @@ private struct SocketAck : Hashable {
5858
}
5959
}
6060

61-
struct SocketAckManager {
61+
class SocketAckManager {
6262
private var acks = Set<SocketAck>(minimumCapacity: 1)
6363

64-
mutating func addAck(_ ack: Int, callback: @escaping AckCallback) {
64+
func addAck(_ ack: Int, callback: @escaping AckCallback) {
6565
acks.insert(SocketAck(ack: ack, callback: callback))
6666
}
6767

6868
/// Should be called on handle queue
69-
mutating func executeAck(_ ack: Int, with items: [Any]) {
69+
func executeAck(_ ack: Int, with items: [Any]) {
7070
acks.remove(SocketAck(ack: ack))?.callback(items)
7171
}
7272

7373
/// Should be called on handle queue
74-
mutating func timeoutAck(_ ack: Int) {
74+
func timeoutAck(_ ack: Int) {
7575
acks.remove(SocketAck(ack: ack))?.callback?([SocketAckStatus.noAck.rawValue])
7676
}
7777
}

Source/SocketIO/Client/SocketIOClient.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ open class SocketIOClient : NSObject, SocketIOClientSpec {
7575
}
7676
}
7777

78-
var ackHandlers = SocketAckManager()
78+
let ackHandlers = SocketAckManager()
7979

8080
private(set) var currentAck = -1
8181

Tests/TestSocketIO/SocketSideEffectTest.swift

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,19 @@ class SocketSideEffectTest: XCTestCase {
3838
waitForExpectations(timeout: 3, handler: nil)
3939
}
4040

41+
func testHandleAckWithAckEmit() {
42+
let expect = expectation(description: "handled ack")
43+
socket.emitWithAck("test").timingOut(after: 0) {data in
44+
XCTAssertEqual(data[0] as? String, "hello world")
45+
46+
self.socket.emitWithAck("test").timingOut(after: 0) {data in}
47+
expect.fulfill()
48+
}
49+
50+
manager.parseEngineMessage("30[\"hello world\"]")
51+
waitForExpectations(timeout: 3, handler: nil)
52+
}
53+
4154
func testHandleAck2() {
4255
let expect = expectation(description: "handled ack2")
4356
socket.emitWithAck("test").timingOut(after: 0) {data in

0 commit comments

Comments
 (0)