tweaks to once

This commit is contained in:
Erik 2015-09-17 23:52:23 -04:00
parent 70c7dacde9
commit 9a05f6043b
3 changed files with 20 additions and 14 deletions

View File

@ -143,6 +143,8 @@ Methods
11. `reconnect()` - Causes the client to reconnect to the server. 11. `reconnect()` - Causes the client to reconnect to the server.
12. `joinNamespace()` - Causes the client to join nsp. Shouldn't need to be called unless you change nsp manually. 12. `joinNamespace()` - Causes the client to join nsp. Shouldn't need to be called unless you change nsp manually.
13. `leaveNamespace()` - Causes the client to leave the nsp and go back to / 13. `leaveNamespace()` - Causes the client to leave the nsp and go back to /
14. `once(event: String, callback: NormalCallback)` - Adds a handler that will only be executed once.
15. `once(event event: String, callback: NormalCallbackObjectiveC)` - Adds a handler that will only be executed once.
Client Events Client Events
------ ------

View File

@ -35,19 +35,21 @@ private func emitAckCallbackObjectiveC(socket: SocketIOClient?, num: Int?)
} }
struct SocketEventHandler { struct SocketEventHandler {
let id = NSUUID()
let event: String let event: String
let id: NSUUID
let callback: NormalCallback? let callback: NormalCallback?
let callBackObjectiveC: NormalCallbackObjectiveC? let callBackObjectiveC: NormalCallbackObjectiveC?
init(event: String, callback: NormalCallback) { init(event: String, id: NSUUID = NSUUID(), callback: NormalCallback) {
self.event = event self.event = event
self.id = id
self.callback = callback self.callback = callback
self.callBackObjectiveC = nil self.callBackObjectiveC = nil
} }
init(event: String, callback: NormalCallbackObjectiveC) { init(event: String, id: NSUUID = NSUUID(), callback: NormalCallbackObjectiveC) {
self.event = event self.event = event
self.id = id
self.callback = nil self.callback = nil
self.callBackObjectiveC = callback self.callBackObjectiveC = callback
} }

View File

@ -430,14 +430,15 @@ public final class SocketIOClient: NSObject, SocketEngineClient {
public func once(event: String, callback: NormalCallback) { public func once(event: String, callback: NormalCallback) {
Logger.log("Adding once handler for event: %@", type: logType, args: event) Logger.log("Adding once handler for event: %@", type: logType, args: event)
var handler: SocketEventHandler?; let id = NSUUID()
handler = SocketEventHandler(event: event) { (data, ack: AckEmitter?) in let handler = SocketEventHandler(event: event, id: id) {[weak self] (data, ack: AckEmitter?) in
self.handlers = ContiguousArray(self.handlers.filter { $0.id != handler!.id }) guard let this = self else {return}
this.handlers = ContiguousArray(this.handlers.filter {$0.id != id})
callback(data, ack) callback(data, ack)
} }
handlers.append(handler!) handlers.append(handler)
} }
/** /**
@ -446,14 +447,15 @@ public final class SocketIOClient: NSObject, SocketEngineClient {
public func once(event event: String, callback: NormalCallbackObjectiveC) { public func once(event event: String, callback: NormalCallbackObjectiveC) {
Logger.log("Adding once handler for event: %@", type: logType, args: event) Logger.log("Adding once handler for event: %@", type: logType, args: event)
var handler: SocketEventHandler?; let id = NSUUID()
handler = SocketEventHandler(event: event) { (data, ack: AckEmitterObjectiveC?) in let handler = SocketEventHandler(event: event, id: id) {[weak self] (data, ack: AckEmitterObjectiveC?) in
self.handlers = ContiguousArray(self.handlers.filter { $0.id != handler!.id }) guard let this = self else {return}
this.handlers = ContiguousArray(this.handlers.filter {$0.id != id})
callback(data, ack) callback(data, ack)
} }
handlers.append(handler!) handlers.append(handler)
} }
/** /**