@@ -389,39 +389,44 @@ public final class SocketIOClient: NSObject, SocketEngineClient {
389
389
handlers = handlers. filter { $0. event != event }
390
390
}
391
391
392
+ /**
393
+ Removes a handler with the specified UUID gotten from an `on` or `once`
394
+ */
395
+ public func off( id id: NSUUID ) {
396
+ DefaultSocketLogger . Logger. log ( " Removing handler with id: %@ " , type: logType, args: id)
397
+
398
+ handlers = handlers. filter { $0. id != id }
399
+ }
400
+
392
401
/**
393
402
Adds a handler for an event.
394
403
*/
395
- public func on( event: String , callback: NormalCallback ) {
404
+ public func on( event: String , callback: NormalCallback ) -> NSUUID {
396
405
DefaultSocketLogger . Logger. log ( " Adding handler for event: %@ " , type: logType, args: event)
397
406
398
407
let handler = SocketEventHandler ( event: event, id: NSUUID ( ) , callback: callback)
399
408
handlers. append ( handler)
409
+
410
+ return handler. id
400
411
}
401
412
402
413
/**
403
414
Adds a single-use handler for an event.
404
415
*/
405
- public func once( event: String , callback: NormalCallback ) {
416
+ public func once( event: String , callback: NormalCallback ) -> NSUUID {
406
417
DefaultSocketLogger . Logger. log ( " Adding once handler for event: %@ " , type: logType, args: event)
407
418
408
419
let id = NSUUID ( )
409
420
410
421
let handler = SocketEventHandler ( event: event, id: id) { [ weak self] data, ack in
411
422
guard let this = self else { return }
412
- this. handlers = this . handlers . filter { $0 . id != id }
423
+ this. off ( id : id )
413
424
callback ( data, ack)
414
425
}
415
426
416
427
handlers. append ( handler)
417
- }
418
-
419
- /**
420
- Removes all handlers.
421
- Can be used after disconnecting to break any potential remaining retain cycles.
422
- */
423
- public func removeAllHandlers( ) {
424
- handlers. removeAll ( keepCapacity: false )
428
+
429
+ return handler. id
425
430
}
426
431
427
432
/**
@@ -457,6 +462,14 @@ public final class SocketIOClient: NSObject, SocketEngineClient {
457
462
tryReconnect ( )
458
463
}
459
464
465
+ /**
466
+ Removes all handlers.
467
+ Can be used after disconnecting to break any potential remaining retain cycles.
468
+ */
469
+ public func removeAllHandlers( ) {
470
+ handlers. removeAll ( keepCapacity: false )
471
+ }
472
+
460
473
private func tryReconnect( ) {
461
474
if reconnectTimer == nil {
462
475
DefaultSocketLogger . Logger. log ( " Starting reconnect " , type: logType)
@@ -495,6 +508,10 @@ public final class SocketIOClient: NSObject, SocketEngineClient {
495
508
496
509
// Test extensions
497
510
extension SocketIOClient {
511
+ var testHandlers : [ SocketEventHandler ] {
512
+ return handlers
513
+ }
514
+
498
515
func setTestable( ) {
499
516
status = . Connected
500
517
}
0 commit comments