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