better handle closes
This commit is contained in:
parent
829992fcef
commit
296802fddb
@ -76,11 +76,15 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
|
|||||||
self.forcePolling = forcePolling
|
self.forcePolling = forcePolling
|
||||||
}
|
}
|
||||||
|
|
||||||
func close() {
|
func close(forced:Bool = false) {
|
||||||
self.pingTimer?.invalidate()
|
self.pingTimer?.invalidate()
|
||||||
|
|
||||||
self.send(PacketType.CLOSE.rawValue)
|
if !forced {
|
||||||
self.ws?.close()
|
self.send(PacketType.CLOSE.rawValue)
|
||||||
|
self.ws?.close()
|
||||||
|
} else {
|
||||||
|
self.client.didForceClose()
|
||||||
|
}
|
||||||
|
|
||||||
if self.polling {
|
if self.polling {
|
||||||
self.client.handleEvent("disconnect", data: "close", isInternalMessage: true)
|
self.client.handleEvent("disconnect", data: "close", isInternalMessage: true)
|
||||||
@ -343,6 +347,10 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if messageString == PacketType.CLOSE.rawValue {
|
||||||
|
self?.close(forced: true)
|
||||||
|
return
|
||||||
|
}
|
||||||
// println("Got something idk what to do with")
|
// println("Got something idk what to do with")
|
||||||
// println(messageString)
|
// println(messageString)
|
||||||
}
|
}
|
||||||
@ -353,27 +361,21 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func probeWebSocket() {
|
private func probeWebSocket() {
|
||||||
if self.websocketConnected {
|
if self.websocketConnected {
|
||||||
self.ws?.send("2probe")
|
self.ws?.send("2probe")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func send(msg:AnyObject, datas:[NSData]? = nil) {
|
func send(msg:String, datas:[NSData]? = nil) {
|
||||||
let _send = {[weak self] (msg:AnyObject, datas:[NSData]?) -> () -> Void in
|
let _send = {[weak self] (msg:String, datas:[NSData]?) -> () -> Void in
|
||||||
return {
|
return {
|
||||||
if self == nil {
|
if self == nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if self!.websocket {
|
if self!.websocket {
|
||||||
self?.ws?.send("\(PacketType.MESSAGE.rawValue)\(msg)")
|
self?.sendWebSocketMessage(msg, datas: datas)
|
||||||
if datas != nil {
|
|
||||||
for data in datas! {
|
|
||||||
let (data, nilString) = self!.createBinaryDataForSend(data)
|
|
||||||
self?.ws?.send(data!)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
self?.sendPollMessage(msg, datas: datas)
|
self?.sendPollMessage(msg, datas: datas)
|
||||||
}
|
}
|
||||||
@ -393,7 +395,7 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
|
|||||||
} else {
|
} else {
|
||||||
let time = Int(NSDate().timeIntervalSince1970)
|
let time = Int(NSDate().timeIntervalSince1970)
|
||||||
var req = NSMutableURLRequest(URL: NSURL(string:
|
var req = NSMutableURLRequest(URL: NSURL(string:
|
||||||
self.urlPolling! + "&t=\(time)-0&b64=1" + "&sid=\(self.sid)")!)
|
self.urlPolling! + "&sid=\(self.sid)")!)
|
||||||
let postStr = "1:\(PacketType.PING.rawValue)"
|
let postStr = "1:\(PacketType.PING.rawValue)"
|
||||||
let postData = postStr.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!
|
let postData = postStr.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!
|
||||||
let postLength = "\(postData.length)"
|
let postLength = "\(postData.length)"
|
||||||
@ -418,13 +420,12 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func sendPollMessage(msg:AnyObject, datas:[NSData]?) {
|
func sendPollMessage(msg:String, datas:[NSData]?) {
|
||||||
// println("Sending: \(msg)")
|
// println("Sending: \(msg)")
|
||||||
var postData:NSData
|
var postData:NSData
|
||||||
var bDatas:[String]?
|
var bDatas:[String]?
|
||||||
let time = Int(NSDate().timeIntervalSince1970)
|
|
||||||
var req = NSMutableURLRequest(URL:
|
var req = NSMutableURLRequest(URL:
|
||||||
NSURL(string:self.urlPolling! + "&t=\(time)&b64=1" + "&sid=\(self.sid)")!)
|
NSURL(string:self.urlPolling! + "&sid=\(self.sid)")!)
|
||||||
|
|
||||||
req.HTTPMethod = "POST"
|
req.HTTPMethod = "POST"
|
||||||
req.setValue("application/html-text", forHTTPHeaderField: "Content-Type")
|
req.setValue("application/html-text", forHTTPHeaderField: "Content-Type")
|
||||||
@ -439,7 +440,7 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let strMsg = "\(PacketType.MESSAGE.rawValue)\(msg as String)"
|
let strMsg = "\(PacketType.MESSAGE.rawValue)\(msg)"
|
||||||
|
|
||||||
let postCount = countElements(strMsg)
|
let postCount = countElements(strMsg)
|
||||||
var postStr = "\(postCount):\(strMsg)"
|
var postStr = "\(postCount):\(strMsg)"
|
||||||
@ -459,12 +460,26 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
|
|||||||
|
|
||||||
NSURLConnection.sendAsynchronousRequest(req, queue: self.workQueue) {[weak self] res, data, err in
|
NSURLConnection.sendAsynchronousRequest(req, queue: self.workQueue) {[weak self] res, data, err in
|
||||||
if err != nil {
|
if err != nil {
|
||||||
println(err)
|
// println(err)
|
||||||
|
self?.handlePollingFailed()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func sendWebSocketMessage(str:String, datas:[NSData]?) {
|
||||||
|
self.ws?.send("\(PacketType.MESSAGE.rawValue)\(str)")
|
||||||
|
|
||||||
|
if datas != nil {
|
||||||
|
for data in datas! {
|
||||||
|
let (data, nilString) = self.createBinaryDataForSend(data)
|
||||||
|
if data != nil {
|
||||||
|
self.ws?.send(data!)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Starts the ping timer
|
// Starts the ping timer
|
||||||
private func startPingTimer() {
|
private func startPingTimer() {
|
||||||
if self.pingInterval == nil {
|
if self.pingInterval == nil {
|
||||||
@ -491,7 +506,6 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
|
|||||||
// Called when a message is recieved
|
// Called when a message is recieved
|
||||||
func webSocket(webSocket:SRWebSocket!, didReceiveMessage message:AnyObject?) {
|
func webSocket(webSocket:SRWebSocket!, didReceiveMessage message:AnyObject?) {
|
||||||
// println(message)
|
// println(message)
|
||||||
|
|
||||||
self.parseEngineMessage(message)
|
self.parseEngineMessage(message)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -506,11 +520,13 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
|
|||||||
func webSocket(webSocket:SRWebSocket!, didCloseWithCode code:Int, reason:String!, wasClean:Bool) {
|
func webSocket(webSocket:SRWebSocket!, didCloseWithCode code:Int, reason:String!, wasClean:Bool) {
|
||||||
self.websocketConnected = false
|
self.websocketConnected = false
|
||||||
self.probing = false
|
self.probing = false
|
||||||
self._websocket = false
|
|
||||||
self._polling = true
|
|
||||||
self.flushProbeWait()
|
self.flushProbeWait()
|
||||||
|
|
||||||
self.client.webSocketDidCloseWithCode(code, reason: reason, wasClean: wasClean)
|
if self.websocket {
|
||||||
|
self._websocket = false
|
||||||
|
self._polling = true
|
||||||
|
self.client.webSocketDidCloseWithCode(code, reason: reason, wasClean: wasClean)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Called when an error occurs.
|
// Called when an error occurs.
|
||||||
|
|||||||
@ -121,6 +121,14 @@ class SocketIOClient {
|
|||||||
self.reconnecting = false
|
self.reconnecting = false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Server wants us to die
|
||||||
|
func didForceClose() {
|
||||||
|
self.closed = true
|
||||||
|
self.connecting = false
|
||||||
|
self.connected = false
|
||||||
|
self.reconnecting = false
|
||||||
|
}
|
||||||
|
|
||||||
// Sends a message with multiple args
|
// Sends a message with multiple args
|
||||||
// If a message contains binary we have to send those
|
// If a message contains binary we have to send those
|
||||||
// seperately.
|
// seperately.
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user