@@ -301,23 +301,25 @@ public class WebSocket : NSObject, NSStreamDelegate {
301
301
CFWriteStreamSetDispatchQueue ( outStream, WebSocket . sharedWorkQueue)
302
302
inStream. open ( )
303
303
outStream. open ( )
304
+
305
+ self. mutex. lock ( )
306
+ self. readyToWrite = true
307
+ self . mutex. unlock ( )
308
+
304
309
let bytes = UnsafePointer < UInt8 > ( data. bytes)
305
310
var timeout = 5000000 //wait 5 seconds before giving up
306
311
writeQueue. addOperationWithBlock { [ unowned self] in
307
312
while !outStream. hasSpaceAvailable {
308
313
usleep ( 100 ) //wait until the socket is ready
309
314
timeout -= 100
310
315
if timeout < 0 {
311
- self . disconnectStream ( self . errorWithDetail ( " write wait timed out " , code: 2 ) )
312
- return
313
- } else if let error = outStream. streamError {
314
- self . disconnectStream ( error)
316
+ self . cleanupStream ( )
317
+ self . doDisconnect ( self . errorWithDetail ( " write wait timed out " , code: 2 ) )
315
318
return
319
+ } else if outStream. streamError != nil {
320
+ return //disconnectStream will be called.
316
321
}
317
322
}
318
- self . mutex. lock ( )
319
- self . readyToWrite = true
320
- self . mutex. unlock ( )
321
323
outStream. write ( bytes, maxLength: data. length)
322
324
}
323
325
}
@@ -350,6 +352,13 @@ public class WebSocket : NSObject, NSStreamDelegate {
350
352
//disconnect the stream object
351
353
private func disconnectStream( error: NSError? ) {
352
354
writeQueue. waitUntilAllOperationsAreFinished ( )
355
+ cleanupStream ( )
356
+ doDisconnect ( error)
357
+ }
358
+
359
+ private func cleanupStream( ) {
360
+ outputStream? . delegate = nil
361
+ inputStream? . delegate = nil
353
362
if let stream = inputStream {
354
363
CFReadStreamSetDispatchQueue ( stream, nil )
355
364
stream. close ( )
@@ -359,8 +368,7 @@ public class WebSocket : NSObject, NSStreamDelegate {
359
368
stream. close ( )
360
369
}
361
370
outputStream = nil
362
- certValidated = false
363
- doDisconnect ( error)
371
+ inputStream = nil
364
372
}
365
373
366
374
///handles the incoming bytes and sending them to the proper processing method
@@ -800,18 +808,7 @@ public class WebSocket : NSObject, NSStreamDelegate {
800
808
mutex. lock ( )
801
809
readyToWrite = false
802
810
mutex. unlock ( )
803
- outputStream? . delegate = nil
804
- inputStream? . delegate = nil
805
- if let stream = inputStream {
806
- CFReadStreamSetDispatchQueue ( stream, nil )
807
- stream. close ( )
808
- }
809
- if let stream = outputStream {
810
- CFWriteStreamSetDispatchQueue ( stream, nil )
811
- stream. close ( )
812
- }
813
- outputStream = nil
814
- inputStream = nil
811
+ cleanupStream ( )
815
812
}
816
813
817
814
}
0 commit comments