Merge pull request #183 from KevinMartin/patch-1

Adds SocketIOClient#once(event, callback)
This commit is contained in:
Erik Little 2015-09-17 23:22:22 -04:00
commit 70c7dacde9
2 changed files with 33 additions and 0 deletions

View File

@ -35,6 +35,7 @@ private func emitAckCallbackObjectiveC(socket: SocketIOClient?, num: Int?)
}
struct SocketEventHandler {
let id = NSUUID()
let event: String
let callback: NormalCallback?
let callBackObjectiveC: NormalCallbackObjectiveC?

View File

@ -424,6 +424,38 @@ 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)
var handler: SocketEventHandler?;
handler = SocketEventHandler(event: event) { (data, ack: AckEmitter?) in
self.handlers = ContiguousArray(self.handlers.filter { $0.id != handler!.id })
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)
var handler: SocketEventHandler?;
handler = SocketEventHandler(event: event) { (data, ack: AckEmitterObjectiveC?) in
self.handlers = ContiguousArray(self.handlers.filter { $0.id != handler!.id })
callback(data, ack)
}
handlers.append(handler!)
}
/**
Removes all handlers.
Can be used after disconnecting to break any potential remaining retain cycles.