bump websocket version again

This commit is contained in:
Erik 2016-01-29 16:57:50 -05:00
parent 8c9a93f79d
commit 8e208b1c66

View File

@ -301,6 +301,11 @@ public class WebSocket : NSObject, NSStreamDelegate {
CFWriteStreamSetDispatchQueue(outStream, WebSocket.sharedWorkQueue)
inStream.open()
outStream.open()
self.mutex.lock()
self.readyToWrite = true
self.mutex.unlock()
let bytes = UnsafePointer<UInt8>(data.bytes)
var timeout = 5000000 //wait 5 seconds before giving up
writeQueue.addOperationWithBlock { [unowned self] in
@ -308,16 +313,13 @@ public class WebSocket : NSObject, NSStreamDelegate {
usleep(100) //wait until the socket is ready
timeout -= 100
if timeout < 0 {
self.disconnectStream(self.errorWithDetail("write wait timed out", code: 2))
return
} else if let error = outStream.streamError {
self.disconnectStream(error)
self.cleanupStream()
self.doDisconnect(self.errorWithDetail("write wait timed out", code: 2))
return
} else if outStream.streamError != nil {
return //disconnectStream will be called.
}
}
self.mutex.lock()
self.readyToWrite = true
self.mutex.unlock()
outStream.write(bytes, maxLength: data.length)
}
}
@ -350,6 +352,13 @@ public class WebSocket : NSObject, NSStreamDelegate {
//disconnect the stream object
private func disconnectStream(error: NSError?) {
writeQueue.waitUntilAllOperationsAreFinished()
cleanupStream()
doDisconnect(error)
}
private func cleanupStream() {
outputStream?.delegate = nil
inputStream?.delegate = nil
if let stream = inputStream {
CFReadStreamSetDispatchQueue(stream, nil)
stream.close()
@ -359,8 +368,7 @@ public class WebSocket : NSObject, NSStreamDelegate {
stream.close()
}
outputStream = nil
certValidated = false
doDisconnect(error)
inputStream = nil
}
///handles the incoming bytes and sending them to the proper processing method
@ -800,18 +808,7 @@ public class WebSocket : NSObject, NSStreamDelegate {
mutex.lock()
readyToWrite = false
mutex.unlock()
outputStream?.delegate = nil
inputStream?.delegate = nil
if let stream = inputStream {
CFReadStreamSetDispatchQueue(stream, nil)
stream.close()
}
if let stream = outputStream {
CFWriteStreamSetDispatchQueue(stream, nil)
stream.close()
}
outputStream = nil
inputStream = nil
cleanupStream()
}
}