send connect event on polling connect

This commit is contained in:
Erik 2015-03-04 10:04:26 -05:00
parent 6e4aa4eee4
commit 7f22dc8f42
2 changed files with 33 additions and 23 deletions

View File

@ -72,7 +72,6 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
var url = "\(self.client.socketURL)/socket.io/?transport=" var url = "\(self.client.socketURL)/socket.io/?transport="
var urlPolling:String var urlPolling:String
var urlWebSocket:String var urlWebSocket:String
let time = Int(NSDate().timeIntervalSince1970 * 1000)
if self.client.secure { if self.client.secure {
urlPolling = "https://" + url + "polling" urlPolling = "https://" + url + "polling"
@ -115,9 +114,7 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
NSURLConnection.sendAsynchronousRequest(req, queue: self.pollingQueue) {[weak self] res, data, err in NSURLConnection.sendAsynchronousRequest(req, queue: self.pollingQueue) {[weak self] res, data, err in
if self == nil { if self == nil {
return return
} } else if err != nil {
if err != nil {
println(err) println(err)
return return
} }
@ -125,6 +122,8 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
let str = NSString(data: data, encoding: NSUTF8StringEncoding) let str = NSString(data: data, encoding: NSUTF8StringEncoding)
println(str) println(str)
// TODO parse packets
} }
} }
@ -169,10 +168,12 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
options: NSJSONReadingOptions.AllowFragments, error: &err) as? NSDictionary { options: NSJSONReadingOptions.AllowFragments, error: &err) as? NSDictionary {
if let sid = json["sid"] as? String { if let sid = json["sid"] as? String {
self?.sid = sid self?.sid = sid
self?.client.didConnect()
self?.client.handleEvent("connect", data: nil, isInternalMessage: false)
self?.ws = SRWebSocket(URL: NSURL(string: urlWebSocket + "&sid=\(self!.sid)")!) self?.ws = SRWebSocket(URL: NSURL(string: urlWebSocket + "&sid=\(self!.sid)")!)
self?.ws?.delegate = self self?.ws?.delegate = self
//self?.ws?.open() self?.ws?.open()
} else { } else {
NSLog("Error handshaking") NSLog("Error handshaking")
@ -208,7 +209,6 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
// We should upgrade // We should upgrade
if strMessage == "3probe" { if strMessage == "3probe" {
self.upgradeTransport() self.upgradeTransport()
self.pollingTimer?.invalidate()
return return
} }
@ -246,7 +246,8 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
self.ws?.send(PacketType.PING.rawValue) self.ws?.send(PacketType.PING.rawValue)
} else { } else {
let time = Int(NSDate().timeIntervalSince1970) let time = Int(NSDate().timeIntervalSince1970)
var req = NSMutableURLRequest(URL: NSURL(string: self.urlPolling! + "&t=\(time)-0&b64=1" + "&sid=\(self.sid)")!) var req = NSMutableURLRequest(URL: NSURL(string:
self.urlPolling! + "&t=\(time)-0&b64=1" + "&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)"
@ -256,17 +257,20 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
req.setValue("application/html-text", forHTTPHeaderField: "Content-Type") req.setValue("application/html-text", forHTTPHeaderField: "Content-Type")
req.HTTPBody = postData req.HTTPBody = postData
NSURLConnection.sendAsynchronousRequest(req, queue: self.pollingQueue) {[weak self] res, data, err in NSURLConnection.sendAsynchronousRequest(req,
if err != nil { queue: self.pollingQueue) {[weak self] res, data, err in
println(err) if self == nil {
self?.pingTimer?.invalidate() return
if !self!.client.reconnecting { } else if err != nil {
self?.client.tryReconnect(triesLeft: self!.client.reconnectAttempts) println(err)
self?.pingTimer?.invalidate()
if !self!.client.reconnecting {
self?.client.tryReconnect(triesLeft: self!.client.reconnectAttempts)
}
return
} }
return
} self?.doPoll()
self?.doPoll()
} }
} }
} }
@ -292,6 +296,7 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
if self.websocketConnected { if self.websocketConnected {
self._websocket = true self._websocket = true
self._polling = false self._polling = false
self.pollingTimer?.invalidate()
self.ws?.send(PacketType.UPGRADE.rawValue) self.ws?.send(PacketType.UPGRADE.rawValue)
} }
} }
@ -306,7 +311,6 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
// Called when the socket is opened // Called when the socket is opened
func webSocketDidOpen(webSocket:SRWebSocket!) { func webSocketDidOpen(webSocket:SRWebSocket!) {
println("socket opened") println("socket opened")
self.startPingTimer()
self.websocketConnected = true self.websocketConnected = true
self.probeWebSocket() self.probeWebSocket()
} }
@ -316,6 +320,8 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
println("socket closed") println("socket closed")
self.pingTimer?.invalidate() self.pingTimer?.invalidate()
self.websocketConnected = false self.websocketConnected = false
self._websocket = false
self._polling = true
// Temp // Temp
self.client.webSocket(webSocket, didCloseWithCode: code, reason: reason, wasClean: wasClean) self.client.webSocket(webSocket, didCloseWithCode: code, reason: reason, wasClean: wasClean)
@ -325,6 +331,8 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
func webSocket(webSocket:SRWebSocket!, didFailWithError error:NSError!) { func webSocket(webSocket:SRWebSocket!, didFailWithError error:NSError!) {
self.pingTimer?.invalidate() self.pingTimer?.invalidate()
self.websocketConnected = false self.websocketConnected = false
self._websocket = false
self._polling = true
// Temp // Temp
self.client.webSocket(webSocket, didFailWithError: error) self.client.webSocket(webSocket, didFailWithError: error)

View File

@ -39,7 +39,6 @@ class SocketIOClient: NSObject {
private var handlers = [SocketEventHandler]() private var handlers = [SocketEventHandler]()
private var lastSocketMessage:SocketEvent? private var lastSocketMessage:SocketEvent?
private var paramConnect = false private var paramConnect = false
private var pingTimer:NSTimer!
private var _secure = false private var _secure = false
var closed = false var closed = false
var connected = false var connected = false
@ -92,7 +91,6 @@ class SocketIOClient: NSObject {
// Closes the socket // Closes the socket
func close() { func close() {
self.pingTimer?.invalidate()
self.closed = true self.closed = true
self.connecting = false self.connecting = false
self.connected = false self.connected = false
@ -121,6 +119,12 @@ class SocketIOClient: NSObject {
return mutData return mutData
} }
func didConnect() {
self.connected = true
self.connecting = 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.
@ -821,7 +825,6 @@ class SocketIOClient: NSObject {
// Called when the socket is closed // Called when the socket is closed
func webSocket(webSocket:SRWebSocket!, didCloseWithCode code:Int, reason:String!, wasClean:Bool) { func webSocket(webSocket:SRWebSocket!, didCloseWithCode code:Int, reason:String!, wasClean:Bool) {
self.pingTimer?.invalidate()
self.connected = false self.connected = false
self.connecting = false self.connecting = false
if self.closed || !self.reconnects { if self.closed || !self.reconnects {
@ -835,7 +838,6 @@ class SocketIOClient: NSObject {
// Called when an error occurs. // Called when an error occurs.
func webSocket(webSocket:SRWebSocket!, didFailWithError error:NSError!) { func webSocket(webSocket:SRWebSocket!, didFailWithError error:NSError!) {
self.pingTimer?.invalidate()
self.connected = false self.connected = false
self.connecting = false self.connecting = false
self.handleEvent("error", data: error.localizedDescription, isInternalMessage: true) self.handleEvent("error", data: error.localizedDescription, isInternalMessage: true)