From 5621f0dbe17cd5bbd5bf82493d1556738abf4371 Mon Sep 17 00:00:00 2001 From: Erik Little Date: Thu, 17 Aug 2017 10:08:51 -0400 Subject: [PATCH] Add once for client events --- SocketIO-MacTests/SocketSideEffectTest.swift | 16 ++++++++++++++++ Source/SocketIOClient.swift | 10 ++++++++++ 2 files changed, 26 insertions(+) diff --git a/SocketIO-MacTests/SocketSideEffectTest.swift b/SocketIO-MacTests/SocketSideEffectTest.swift index f281e98..ab12640 100644 --- a/SocketIO-MacTests/SocketSideEffectTest.swift +++ b/SocketIO-MacTests/SocketSideEffectTest.swift @@ -83,6 +83,22 @@ class SocketSideEffectTest: XCTestCase { waitForExpectations(timeout: 3, handler: nil) } + func testHandleOnceClientEvent() { + let expect = expectation(description: "handled event") + + socket.once(clientEvent: .connect) {data, ack in + XCTAssertEqual(self.socket.testHandlers.count, 0) + expect.fulfill() + } + + DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 0.1) { + // Fake connecting + self.socket.parseEngineMessage("0/") + } + + waitForExpectations(timeout: 3, handler: nil) + } + func testOffWithEvent() { socket.on("test") {data, ack in } socket.on("test") {data, ack in } diff --git a/Source/SocketIOClient.swift b/Source/SocketIOClient.swift index c7d3928..c70685b 100644 --- a/Source/SocketIOClient.swift +++ b/Source/SocketIOClient.swift @@ -508,6 +508,16 @@ open class SocketIOClient : NSObject, SocketIOClientSpec, SocketEngineClient, So return handler.id } + /// Adds a single-use handler for a client event. + /// + /// - parameter clientEvent: The event for this handler. + /// - parameter callback: The callback that will execute when this event is received. + /// - returns: A unique id for the handler that can be used to remove it. + @discardableResult + open func once(clientEvent event: SocketClientEvent, callback: @escaping NormalCallback) -> UUID { + return once(event.rawValue, callback: callback) + } + /// Adds a single-use handler for an event. /// /// - parameter event: The event name for this handler.