@@ -49,7 +49,7 @@ open class SocketEngine : NSObject, URLSessionDelegate, SocketEnginePollable, So
49
49
/// A queue of engine.io messages waiting for POSTing
50
50
///
51
51
/// **You should not touch this directly**
52
- public var postWait = [ String ] ( )
52
+ public var postWait = [ Post ] ( )
53
53
54
54
/// `true` if there is an outstanding poll. Trying to poll before the first is done will cause socket.io to
55
55
/// disconnect us.
@@ -340,15 +340,15 @@ open class SocketEngine : NSObject, URLSessionDelegate, SocketEnginePollable, So
340
340
if polling {
341
341
disconnectPolling ( reason: reason)
342
342
} else {
343
- sendWebSocketMessage ( " " , withType: . close, withData: [ ] )
343
+ sendWebSocketMessage ( " " , withType: . close, withData: [ ] , completion : { } )
344
344
closeOutEngine ( reason: reason)
345
345
}
346
346
}
347
347
348
348
// We need to take special care when we're polling that we send it ASAP
349
349
// Also make sure we're on the emitQueue since we're touching postWait
350
350
private func disconnectPolling( reason: String ) {
351
- postWait. append ( String ( SocketEnginePacketType . close. rawValue) )
351
+ postWait. append ( ( String ( SocketEnginePacketType . close. rawValue) , { } ) )
352
352
353
353
doRequest ( for: createRequestForPostWithPostWait ( ) ) { _, _, _ in }
354
354
closeOutEngine ( reason: reason)
@@ -366,7 +366,7 @@ open class SocketEngine : NSObject, URLSessionDelegate, SocketEnginePollable, So
366
366
367
367
DefaultSocketLogger . Logger. log ( " Switching to WebSockets " , type: SocketEngine . logType)
368
368
369
- sendWebSocketMessage ( " " , withType: . upgrade, withData: [ ] )
369
+ sendWebSocketMessage ( " " , withType: . upgrade, withData: [ ] , completion : { } )
370
370
polling = false
371
371
fastUpgrade = false
372
372
probing = false
@@ -384,7 +384,7 @@ open class SocketEngine : NSObject, URLSessionDelegate, SocketEnginePollable, So
384
384
DefaultSocketLogger . Logger. log ( " Flushing probe wait " , type: SocketEngine . logType)
385
385
386
386
for waiter in probeWait {
387
- write ( waiter. msg, withType: waiter. type, withData: waiter. data)
387
+ write ( waiter. msg, withType: waiter. type, withData: waiter. data, completion : waiter . completion )
388
388
}
389
389
390
390
probeWait. removeAll ( keepingCapacity: false )
@@ -398,7 +398,7 @@ open class SocketEngine : NSObject, URLSessionDelegate, SocketEnginePollable, So
398
398
guard let ws = self . ws else { return }
399
399
400
400
for msg in postWait {
401
- ws. write ( string: msg)
401
+ ws. write ( string: msg. msg , completion : msg . completion )
402
402
}
403
403
404
404
postWait. removeAll ( keepingCapacity: false )
@@ -544,7 +544,7 @@ open class SocketEngine : NSObject, URLSessionDelegate, SocketEnginePollable, So
544
544
}
545
545
546
546
pongsMissed += 1
547
- write ( " " , withType: . ping, withData: [ ] )
547
+ write ( " " , withType: . ping, withData: [ ] , completion : { } )
548
548
549
549
engineQueue. asyncAfter ( deadline: . now( ) + . milliseconds( pingInterval) ) { [ weak self, id = self . sid] in
550
550
// Make sure not to ping old connections
@@ -600,7 +600,7 @@ open class SocketEngine : NSObject, URLSessionDelegate, SocketEnginePollable, So
600
600
DefaultSocketLogger . Logger. log ( " Upgrading transport to WebSockets " , type: SocketEngine . logType)
601
601
602
602
fastUpgrade = true
603
- sendPollMessage ( " " , withType: . noop, withData: [ ] )
603
+ sendPollMessage ( " " , withType: . noop, withData: [ ] , completion : { } )
604
604
// After this point, we should not send anymore polling messages
605
605
}
606
606
}
@@ -610,23 +610,27 @@ open class SocketEngine : NSObject, URLSessionDelegate, SocketEnginePollable, So
610
610
/// - parameter msg: The message to send.
611
611
/// - parameter type: The type of this message.
612
612
/// - parameter data: Any data that this message has.
613
- open func write( _ msg: String , withType type: SocketEnginePacketType , withData data: [ Data ] ) {
613
+ /// - parameter completion: Callback called on transport write completion.
614
+ open func write( _ msg: String , withType type: SocketEnginePacketType , withData data: [ Data ] , completion: @escaping ( ) -> ( ) ) {
614
615
engineQueue. async {
615
- guard self . connected else { return }
616
+ guard self . connected else {
617
+ completion ( )
618
+ return
619
+ }
616
620
guard !self . probing else {
617
- self . probeWait. append ( ( msg, type, data) )
621
+ self . probeWait. append ( ( msg, type, data, completion ) )
618
622
619
623
return
620
624
}
621
625
622
626
if self . polling {
623
627
DefaultSocketLogger . Logger. log ( " Writing poll: \( msg) has data: \( data. count != 0 ) " ,
624
628
type: SocketEngine . logType)
625
- self . sendPollMessage ( msg, withType: type, withData: data)
629
+ self . sendPollMessage ( msg, withType: type, withData: data, completion : completion )
626
630
} else {
627
631
DefaultSocketLogger . Logger. log ( " Writing ws: \( msg) has data: \( data. count != 0 ) " ,
628
632
type: SocketEngine . logType)
629
- self . sendWebSocketMessage ( msg, withType: type, withData: data)
633
+ self . sendWebSocketMessage ( msg, withType: type, withData: data, completion : completion )
630
634
}
631
635
}
632
636
}
0 commit comments