Skip to content

Commit 70c7dac

Browse files
committed
Merge pull request #183 from KevinMartin/patch-1
Adds SocketIOClient#once(event, callback)
2 parents a81f925 + a9b4193 commit 70c7dac

File tree

2 files changed

+33
-0
lines changed

2 files changed

+33
-0
lines changed

SocketIOClientSwift/SocketEventHandler.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ private func emitAckCallbackObjectiveC(socket: SocketIOClient?, num: Int?)
3535
}
3636

3737
struct SocketEventHandler {
38+
let id = NSUUID()
3839
let event: String
3940
let callback: NormalCallback?
4041
let callBackObjectiveC: NormalCallbackObjectiveC?

SocketIOClientSwift/SocketIOClient.swift

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -424,6 +424,38 @@ public final class SocketIOClient: NSObject, SocketEngineClient {
424424
handlers.append(handler)
425425
}
426426

427+
/**
428+
Adds a single-use handler for an event.
429+
*/
430+
public func once(event: String, callback: NormalCallback) {
431+
Logger.log("Adding once handler for event: %@", type: logType, args: event)
432+
433+
var handler: SocketEventHandler?;
434+
435+
handler = SocketEventHandler(event: event) { (data, ack: AckEmitter?) in
436+
self.handlers = ContiguousArray(self.handlers.filter { $0.id != handler!.id })
437+
callback(data, ack)
438+
}
439+
440+
handlers.append(handler!)
441+
}
442+
443+
/**
444+
Adds a single-use handler for an event.
445+
*/
446+
public func once(event event: String, callback: NormalCallbackObjectiveC) {
447+
Logger.log("Adding once handler for event: %@", type: logType, args: event)
448+
449+
var handler: SocketEventHandler?;
450+
451+
handler = SocketEventHandler(event: event) { (data, ack: AckEmitterObjectiveC?) in
452+
self.handlers = ContiguousArray(self.handlers.filter { $0.id != handler!.id })
453+
callback(data, ack)
454+
}
455+
456+
handlers.append(handler!)
457+
}
458+
427459
/**
428460
Removes all handlers.
429461
Can be used after disconnecting to break any potential remaining retain cycles.

0 commit comments

Comments
 (0)