Adds SocketIOClient#once(event, callback)

When the specified event is emitted, the handler deregisters itself.
This commit is contained in:
Kevin Jose Martin 2015-09-17 18:19:49 -04:00
parent a81f925671
commit a72f96759e

View File

@ -424,6 +424,34 @@ public final class SocketIOClient: NSObject, SocketEngineClient {
handlers.append(handler)
}
/**
Adds a single-use handler for an event.
*/
public func once(event: String, callback: NormalCallback) {
Logger.log("Adding once handler for event: %@", type: logType, args: event)
let handler = SocketEventHandler(event: event) { data: NSArray?, ack: AckEmitter? in
handlers = ContiguousArray(handlers.filter { $0 != handler })
callback?(data, ack)
}
handlers.append(handler)
}
/**
Adds a single-use handler for an event.
*/
public func once(event event: String, callback: NormalCallbackObjectiveC) {
Logger.log("Adding once handler for event: %@", type: logType, args: event)
let handler = SocketEventHandler(event: event) { data: NSArray?, ack: AckEmitterObjectiveC? in
handlers = ContiguousArray(handlers.filter { $0 != handler })
callback?(data, ack)
}
handlers.append(handler)
}
/**
Removes all handlers.
Can be used after disconnecting to break any potential remaining retain cycles.