Merge pull request #1119 from vonox7/completion-handler-nil
Don’t create empty closures when we don’t need them
This commit is contained in:
commit
ec86a19fc6
@ -204,25 +204,7 @@ open class SocketIOClient : NSObject, SocketIOClientSpec {
|
|||||||
leaveNamespace()
|
leaveNamespace()
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Send an event to the server, with optional data items.
|
/// Send an event to the server, with optional data items and optional 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.
|
|
||||||
open func emit(_ event: String, _ items: SocketData...) {
|
|
||||||
do {
|
|
||||||
try emit(event, with: items.map({ try $0.socketRepresentation() }))
|
|
||||||
} catch {
|
|
||||||
DefaultSocketLogger.Logger.error("Error creating socketRepresentation for emit: \(event), \(items)",
|
|
||||||
type: logType)
|
|
||||||
|
|
||||||
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`
|
/// 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]`
|
/// will be emitted. The structure of the error data is `[eventName, items, theError]`
|
||||||
@ -230,7 +212,7 @@ open class SocketIOClient : NSObject, SocketIOClientSpec {
|
|||||||
/// - parameter event: The event to send.
|
/// - parameter event: The event to send.
|
||||||
/// - parameter items: The items to send with this event. May be left out.
|
/// - parameter items: The items to send with this event. May be left out.
|
||||||
/// - parameter completion: Callback called on transport write completion.
|
/// - parameter completion: Callback called on transport write completion.
|
||||||
open func emit(_ event: String, _ items: SocketData..., completion: @escaping () -> ()) {
|
open func emit(_ event: String, _ items: SocketData..., completion: (() -> ())? = nil) {
|
||||||
do {
|
do {
|
||||||
try emit(event, with: items.map({ try $0.socketRepresentation() }), completion: completion)
|
try emit(event, with: items.map({ try $0.socketRepresentation() }), completion: completion)
|
||||||
} catch {
|
} catch {
|
||||||
@ -256,7 +238,7 @@ open class SocketIOClient : NSObject, SocketIOClientSpec {
|
|||||||
/// - parameter items: The items to send with this event. Send an empty array to send no data.
|
/// - parameter items: The items to send with this event. Send an empty array to send no data.
|
||||||
/// - parameter completion: Callback called on transport write completion.
|
/// - parameter completion: Callback called on transport write completion.
|
||||||
@objc
|
@objc
|
||||||
open func emit(_ event: String, with items: [Any], completion: @escaping () -> ()) {
|
open func emit(_ event: String, with items: [Any], completion: (() -> ())? = nil) {
|
||||||
emit([event] + items, completion: completion)
|
emit([event] + items, completion: completion)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -317,18 +299,18 @@ open class SocketIOClient : NSObject, SocketIOClientSpec {
|
|||||||
ack: Int? = nil,
|
ack: Int? = nil,
|
||||||
binary: Bool = true,
|
binary: Bool = true,
|
||||||
isAck: Bool = false,
|
isAck: Bool = false,
|
||||||
completion: @escaping () -> () = {}
|
completion: (() -> ())? = nil
|
||||||
) {
|
) {
|
||||||
// wrap the completion handler so it always runs async via handlerQueue
|
// wrap the completion handler so it always runs async via handlerQueue
|
||||||
let wrappedCompletion = {[weak self] in
|
let wrappedCompletion: (() -> ())? = (completion == nil) ? nil : {[weak self] in
|
||||||
guard let this = self else { return }
|
guard let this = self else { return }
|
||||||
this.manager?.handleQueue.async {
|
this.manager?.handleQueue.async {
|
||||||
completion()
|
completion!()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
guard status == .connected else {
|
guard status == .connected else {
|
||||||
wrappedCompletion()
|
wrappedCompletion?()
|
||||||
handleClientEvent(.error, data: ["Tried emitting when not connected"])
|
handleClientEvent(.error, data: ["Tried emitting when not connected"])
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
@ -92,16 +92,7 @@ public protocol SocketIOClientSpec : AnyObject {
|
|||||||
/// Disconnects the socket.
|
/// Disconnects the socket.
|
||||||
func disconnect()
|
func disconnect()
|
||||||
|
|
||||||
/// Send an event to the server, with optional data items.
|
/// Send an event to the server, with optional data items and optional 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.
|
|
||||||
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`
|
/// 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]`
|
/// will be emitted. The structure of the error data is `[eventName, items, theError]`
|
||||||
@ -109,7 +100,7 @@ public protocol SocketIOClientSpec : AnyObject {
|
|||||||
/// - parameter event: The event to send.
|
/// - parameter event: The event to send.
|
||||||
/// - parameter items: The items to send with this event. May be left out.
|
/// - parameter items: The items to send with this event. May be left out.
|
||||||
/// - parameter completion: Callback called on transport write completion.
|
/// - parameter completion: Callback called on transport write completion.
|
||||||
func emit(_ event: String, _ items: SocketData..., completion: @escaping () -> ())
|
func emit(_ event: String, _ items: SocketData..., completion: (() -> ())?)
|
||||||
|
|
||||||
/// Call when you wish to tell the server that you've received the event for `ack`.
|
/// Call when you wish to tell the server that you've received the event for `ack`.
|
||||||
///
|
///
|
||||||
|
|||||||
@ -346,7 +346,7 @@ open class SocketEngine : NSObject, URLSessionDelegate, SocketEnginePollable, So
|
|||||||
if polling {
|
if polling {
|
||||||
disconnectPolling(reason: reason)
|
disconnectPolling(reason: reason)
|
||||||
} else {
|
} else {
|
||||||
sendWebSocketMessage("", withType: .close, withData: [], completion: {})
|
sendWebSocketMessage("", withType: .close, withData: [], completion: nil)
|
||||||
closeOutEngine(reason: reason)
|
closeOutEngine(reason: reason)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -372,7 +372,7 @@ open class SocketEngine : NSObject, URLSessionDelegate, SocketEnginePollable, So
|
|||||||
|
|
||||||
DefaultSocketLogger.Logger.log("Switching to WebSockets", type: SocketEngine.logType)
|
DefaultSocketLogger.Logger.log("Switching to WebSockets", type: SocketEngine.logType)
|
||||||
|
|
||||||
sendWebSocketMessage("", withType: .upgrade, withData: [], completion: {})
|
sendWebSocketMessage("", withType: .upgrade, withData: [], completion: nil)
|
||||||
polling = false
|
polling = false
|
||||||
fastUpgrade = false
|
fastUpgrade = false
|
||||||
probing = false
|
probing = false
|
||||||
@ -390,7 +390,7 @@ open class SocketEngine : NSObject, URLSessionDelegate, SocketEnginePollable, So
|
|||||||
DefaultSocketLogger.Logger.log("Flushing probe wait", type: SocketEngine.logType)
|
DefaultSocketLogger.Logger.log("Flushing probe wait", type: SocketEngine.logType)
|
||||||
|
|
||||||
for waiter in probeWait {
|
for waiter in probeWait {
|
||||||
write(waiter.msg, withType: waiter.type, withData: waiter.data, completion:waiter.completion)
|
write(waiter.msg, withType: waiter.type, withData: waiter.data, completion: waiter.completion)
|
||||||
}
|
}
|
||||||
|
|
||||||
probeWait.removeAll(keepingCapacity: false)
|
probeWait.removeAll(keepingCapacity: false)
|
||||||
@ -550,7 +550,7 @@ open class SocketEngine : NSObject, URLSessionDelegate, SocketEnginePollable, So
|
|||||||
}
|
}
|
||||||
|
|
||||||
pongsMissed += 1
|
pongsMissed += 1
|
||||||
write("", withType: .ping, withData: [], completion: {})
|
write("", withType: .ping, withData: [], completion: nil)
|
||||||
|
|
||||||
engineQueue.asyncAfter(deadline: .now() + .milliseconds(pingInterval)) {[weak self, id = self.sid] in
|
engineQueue.asyncAfter(deadline: .now() + .milliseconds(pingInterval)) {[weak self, id = self.sid] in
|
||||||
// Make sure not to ping old connections
|
// Make sure not to ping old connections
|
||||||
@ -606,7 +606,7 @@ open class SocketEngine : NSObject, URLSessionDelegate, SocketEnginePollable, So
|
|||||||
DefaultSocketLogger.Logger.log("Upgrading transport to WebSockets", type: SocketEngine.logType)
|
DefaultSocketLogger.Logger.log("Upgrading transport to WebSockets", type: SocketEngine.logType)
|
||||||
|
|
||||||
fastUpgrade = true
|
fastUpgrade = true
|
||||||
sendPollMessage("", withType: .noop, withData: [], completion: {})
|
sendPollMessage("", withType: .noop, withData: [], completion: nil)
|
||||||
// After this point, we should not send anymore polling messages
|
// After this point, we should not send anymore polling messages
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -617,10 +617,10 @@ open class SocketEngine : NSObject, URLSessionDelegate, SocketEnginePollable, So
|
|||||||
/// - parameter type: The type of this message.
|
/// - parameter type: The type of this message.
|
||||||
/// - parameter data: Any data that this message has.
|
/// - parameter data: Any data that this message has.
|
||||||
/// - parameter completion: Callback called on transport write completion.
|
/// - parameter completion: Callback called on transport write completion.
|
||||||
open func write(_ msg: String, withType type: SocketEnginePacketType, withData data: [Data], completion: @escaping () -> ()) {
|
open func write(_ msg: String, withType type: SocketEnginePacketType, withData data: [Data], completion: (() -> ())? = nil) {
|
||||||
engineQueue.async {
|
engineQueue.async {
|
||||||
guard self.connected else {
|
guard self.connected else {
|
||||||
completion()
|
completion?()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
guard !self.probing else {
|
guard !self.probing else {
|
||||||
|
|||||||
@ -65,7 +65,7 @@ public protocol SocketEnginePollable : SocketEngineSpec {
|
|||||||
/// - parameter message: The message to send.
|
/// - parameter message: The message to send.
|
||||||
/// - parameter withType: The type of message to send.
|
/// - parameter withType: The type of message to send.
|
||||||
/// - parameter withData: The data associated with this message.
|
/// - parameter withData: The data associated with this message.
|
||||||
func sendPollMessage(_ message: String, withType type: SocketEnginePacketType, withData datas: [Data], completion: @escaping () -> ())
|
func sendPollMessage(_ message: String, withType type: SocketEnginePacketType, withData datas: [Data], completion: (() -> ())?)
|
||||||
|
|
||||||
/// Call to stop polling and invalidate the URLSession.
|
/// Call to stop polling and invalidate the URLSession.
|
||||||
func stopPolling()
|
func stopPolling()
|
||||||
@ -75,7 +75,7 @@ public protocol SocketEnginePollable : SocketEngineSpec {
|
|||||||
extension SocketEnginePollable {
|
extension SocketEnginePollable {
|
||||||
func createRequestForPostWithPostWait() -> URLRequest {
|
func createRequestForPostWithPostWait() -> URLRequest {
|
||||||
defer {
|
defer {
|
||||||
for packet in postWait { packet.completion() }
|
for packet in postWait { packet.completion?() }
|
||||||
postWait.removeAll(keepingCapacity: true)
|
postWait.removeAll(keepingCapacity: true)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -219,7 +219,7 @@ extension SocketEnginePollable {
|
|||||||
/// - parameter withType: The type of message to send.
|
/// - parameter withType: The type of message to send.
|
||||||
/// - parameter withData: The data associated with this message.
|
/// - parameter withData: The data associated with this message.
|
||||||
/// - parameter completion: Callback called on transport write completion.
|
/// - parameter completion: Callback called on transport write completion.
|
||||||
public func sendPollMessage(_ message: String, withType type: SocketEnginePacketType, withData datas: [Data], completion: @escaping () -> ()) {
|
public func sendPollMessage(_ message: String, withType type: SocketEnginePacketType, withData datas: [Data], completion: (() -> ())? = nil) {
|
||||||
DefaultSocketLogger.Logger.log("Sending poll: \(message) as type: \(type.rawValue)", type: "SocketEnginePolling")
|
DefaultSocketLogger.Logger.log("Sending poll: \(message) as type: \(type.rawValue)", type: "SocketEnginePolling")
|
||||||
|
|
||||||
postWait.append((String(type.rawValue) + message, completion))
|
postWait.append((String(type.rawValue) + message, completion))
|
||||||
|
|||||||
@ -138,7 +138,7 @@ import Starscream
|
|||||||
/// - parameter type: The type of this message.
|
/// - parameter type: The type of this message.
|
||||||
/// - parameter data: Any data that this message has.
|
/// - parameter data: Any data that this message has.
|
||||||
/// - parameter completion: Callback called on transport write completion.
|
/// - parameter completion: Callback called on transport write completion.
|
||||||
func write(_ msg: String, withType type: SocketEnginePacketType, withData data: [Data], completion: @escaping () -> ())
|
func write(_ msg: String, withType type: SocketEnginePacketType, withData data: [Data], completion: (() -> ())?)
|
||||||
}
|
}
|
||||||
|
|
||||||
extension SocketEngineSpec {
|
extension SocketEngineSpec {
|
||||||
@ -180,7 +180,7 @@ extension SocketEngineSpec {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Send an engine message (4)
|
/// Send an engine message (4)
|
||||||
func send(_ msg: String, withData datas: [Data], completion: @escaping () -> () = {}) {
|
func send(_ msg: String, withData datas: [Data], completion: (() -> ())? = nil) {
|
||||||
write(msg, withType: .message, withData: datas, completion: completion)
|
write(msg, withType: .message, withData: datas, completion: completion)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -41,14 +41,14 @@ public protocol SocketEngineWebsocket : SocketEngineSpec {
|
|||||||
func sendWebSocketMessage(_ str: String,
|
func sendWebSocketMessage(_ str: String,
|
||||||
withType type: SocketEnginePacketType,
|
withType type: SocketEnginePacketType,
|
||||||
withData datas: [Data],
|
withData datas: [Data],
|
||||||
completion: @escaping () -> ())
|
completion: (() -> ())?)
|
||||||
}
|
}
|
||||||
|
|
||||||
// WebSocket methods
|
// WebSocket methods
|
||||||
extension SocketEngineWebsocket {
|
extension SocketEngineWebsocket {
|
||||||
func probeWebSocket() {
|
func probeWebSocket() {
|
||||||
if ws?.isConnected ?? false {
|
if ws?.isConnected ?? false {
|
||||||
sendWebSocketMessage("probe", withType: .ping, withData: [], completion: {})
|
sendWebSocketMessage("probe", withType: .ping, withData: [], completion: nil)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -63,7 +63,7 @@ extension SocketEngineWebsocket {
|
|||||||
public func sendWebSocketMessage(_ str: String,
|
public func sendWebSocketMessage(_ str: String,
|
||||||
withType type: SocketEnginePacketType,
|
withType type: SocketEnginePacketType,
|
||||||
withData datas: [Data],
|
withData datas: [Data],
|
||||||
completion: @escaping () -> ()
|
completion: (() -> ())?
|
||||||
) {
|
) {
|
||||||
DefaultSocketLogger.Logger.log("Sending ws: \(str) as type: \(type.rawValue)", type: "SocketEngineWebSocket")
|
DefaultSocketLogger.Logger.log("Sending ws: \(str) as type: \(type.rawValue)", type: "SocketEngineWebSocket")
|
||||||
|
|
||||||
|
|||||||
@ -286,7 +286,7 @@ open class SocketManager : NSObject, SocketManagerSpec, SocketParsable, SocketDa
|
|||||||
/// - parameter items: The data to send with this event.
|
/// - parameter items: The data to send with this event.
|
||||||
open func emitAll(_ event: String, withItems items: [Any]) {
|
open func emitAll(_ event: String, withItems items: [Any]) {
|
||||||
forAll {socket in
|
forAll {socket in
|
||||||
socket.emit(event, with: items, completion: {})
|
socket.emit(event, with: items, completion: nil)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -74,10 +74,10 @@ public typealias AckCallback = ([Any]) -> ()
|
|||||||
public typealias NormalCallback = ([Any], SocketAckEmitter) -> ()
|
public typealias NormalCallback = ([Any], SocketAckEmitter) -> ()
|
||||||
|
|
||||||
/// A typealias for a queued POST
|
/// A typealias for a queued POST
|
||||||
public typealias Post = (msg: String, completion: (() -> ()))
|
public typealias Post = (msg: String, completion: (() -> ())?)
|
||||||
|
|
||||||
typealias JSON = [String: Any]
|
typealias JSON = [String: Any]
|
||||||
typealias Probe = (msg: String, type: SocketEnginePacketType, data: [Data], completion: (() -> ()))
|
typealias Probe = (msg: String, type: SocketEnginePacketType, data: [Data], completion: (() -> ())?)
|
||||||
typealias ProbeWaitQueue = [Probe]
|
typealias ProbeWaitQueue = [Probe]
|
||||||
|
|
||||||
enum Either<E, V> {
|
enum Either<E, V> {
|
||||||
|
|||||||
@ -198,7 +198,7 @@ public class TestSocket : SocketIOClient {
|
|||||||
super.didDisconnect(reason: reason)
|
super.didDisconnect(reason: reason)
|
||||||
}
|
}
|
||||||
|
|
||||||
public override func emit(_ event: String, with items: [Any], completion: @escaping () -> ()) {
|
public override func emit(_ event: String, with items: [Any], completion: (() -> ())?) {
|
||||||
expectations[ManagerExpectation.emitAllEventCalled]?.fulfill()
|
expectations[ManagerExpectation.emitAllEventCalled]?.fulfill()
|
||||||
expectations[ManagerExpectation.emitAllEventCalled] = nil
|
expectations[ManagerExpectation.emitAllEventCalled] = nil
|
||||||
|
|
||||||
|
|||||||
@ -511,5 +511,5 @@ class TestEngine : SocketEngineSpec {
|
|||||||
func flushWaitingForPostToWebSocket() { }
|
func flushWaitingForPostToWebSocket() { }
|
||||||
func parseEngineData(_ data: Data) { }
|
func parseEngineData(_ data: Data) { }
|
||||||
func parseEngineMessage(_ message: String) { }
|
func parseEngineMessage(_ message: String) { }
|
||||||
func write(_ msg: String, withType type: SocketEnginePacketType, withData data: [Data], completion: @escaping () -> ()) { }
|
func write(_ msg: String, withType type: SocketEnginePacketType, withData data: [Data], completion: (() -> ())?) { }
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user