From a72f96759e96091986af3785346406d063622165 Mon Sep 17 00:00:00 2001 From: Kevin Jose Martin Date: Thu, 17 Sep 2015 18:19:49 -0400 Subject: [PATCH] Adds SocketIOClient#once(event, callback) When the specified event is emitted, the handler deregisters itself. --- SocketIOClientSwift/SocketIOClient.swift | 28 ++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/SocketIOClientSwift/SocketIOClient.swift b/SocketIOClientSwift/SocketIOClient.swift index cd52b69..aa6fdf8 100644 --- a/SocketIOClientSwift/SocketIOClient.swift +++ b/SocketIOClientSwift/SocketIOClient.swift @@ -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.