From b3e305fd1448165fa52e0a2d2b2afffbecbbadae Mon Sep 17 00:00:00 2001 From: Andy Date: Tue, 2 Oct 2018 20:55:38 +0700 Subject: [PATCH] Add a variadic method for emit completion handlers in swift --- Source/SocketIO/Client/SocketIOClient.swift | 12 ++++++++++++ Source/SocketIO/Client/SocketIOClientSpec.swift | 10 ++++++++++ Tests/TestSocketIO/SocketSideEffectTest.swift | 5 +++++ 3 files changed, 27 insertions(+) diff --git a/Source/SocketIO/Client/SocketIOClient.swift b/Source/SocketIO/Client/SocketIOClient.swift index a4c892c..a0d89a7 100644 --- a/Source/SocketIO/Client/SocketIOClient.swift +++ b/Source/SocketIO/Client/SocketIOClient.swift @@ -221,6 +221,18 @@ open class SocketIOClient : NSObject, SocketIOClientSpec { handleClientEvent(.error, data: [event, items, error]) } } + + /// Send an event to the server, with optional data items and write completion handler. + /// + /// If an error occurs trying to transform `items` into their socket representation, a `SocketClientEvent.error` + /// will be emitted. The structure of the error data is `[eventName, items, theError]` + /// + /// - parameter event: The event to send. + /// - parameter items: The items to send with this event. May be left out. + /// - parameter completion: Callback called on transport write completion. + open func emit(_ event: String, _ items: SocketData..., completion: @escaping () -> ()) { + emit([event] + items, completion: completion) + } /// Same as emit, but meant for Objective-C /// diff --git a/Source/SocketIO/Client/SocketIOClientSpec.swift b/Source/SocketIO/Client/SocketIOClientSpec.swift index 3835412..629ee78 100644 --- a/Source/SocketIO/Client/SocketIOClientSpec.swift +++ b/Source/SocketIO/Client/SocketIOClientSpec.swift @@ -101,6 +101,16 @@ public protocol SocketIOClientSpec : AnyObject { /// - parameter items: The items to send with this event. May be left out. func emit(_ event: String, _ items: SocketData...) + /// Send an event to the server, with optional data items and write completion handler. + /// + /// If an error occurs trying to transform `items` into their socket representation, a `SocketClientEvent.error` + /// will be emitted. The structure of the error data is `[eventName, items, theError]` + /// + /// - parameter event: The event to send. + /// - parameter items: The items to send with this event. May be left out. + /// - parameter completion: Callback called on transport write completion. + func emit(_ event: String, _ items: SocketData..., completion: @escaping () -> ()) + /// Call when you wish to tell the server that you've received the event for `ack`. /// /// - parameter ack: The ack number. diff --git a/Tests/TestSocketIO/SocketSideEffectTest.swift b/Tests/TestSocketIO/SocketSideEffectTest.swift index 49542ce..72c43f9 100644 --- a/Tests/TestSocketIO/SocketSideEffectTest.swift +++ b/Tests/TestSocketIO/SocketSideEffectTest.swift @@ -27,6 +27,11 @@ class SocketSideEffectTest: XCTestCase { XCTAssertEqual(socket.currentAck, 1) } + func testEmitCompletionSyntax() { + socket.emit("test", completion: {}) + socket.emit("test", "thing", completion: {}) + } + func testHandleAck() { let expect = expectation(description: "handled ack") socket.emitWithAck("test").timingOut(after: 0) {data in