Fixes. Sending doesn't work on polling, namespaces broken
This commit is contained in:
parent
3088bd88e6
commit
2e80b9405d
@ -44,7 +44,6 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
|
|||||||
unowned let client:SocketIOClient
|
unowned let client:SocketIOClient
|
||||||
private let pollingQueue = NSOperationQueue()
|
private let pollingQueue = NSOperationQueue()
|
||||||
private var pingTimer:NSTimer?
|
private var pingTimer:NSTimer?
|
||||||
private var pollingTimer:NSTimer?
|
|
||||||
private var _polling = true
|
private var _polling = true
|
||||||
private var wait = false
|
private var wait = false
|
||||||
private var _websocket = false
|
private var _websocket = false
|
||||||
@ -67,7 +66,6 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
|
|||||||
|
|
||||||
func close() {
|
func close() {
|
||||||
self.pingTimer?.invalidate()
|
self.pingTimer?.invalidate()
|
||||||
self.pollingTimer?.invalidate()
|
|
||||||
|
|
||||||
if self.websocket {
|
if self.websocket {
|
||||||
self.ws?.send(PacketType.MESSAGE.rawValue + PacketType.CLOSE.rawValue)
|
self.ws?.send(PacketType.MESSAGE.rawValue + PacketType.CLOSE.rawValue)
|
||||||
@ -165,10 +163,12 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
|
|||||||
|
|
||||||
if let dataString = NSString(data: data, encoding: NSUTF8StringEncoding) {
|
if let dataString = NSString(data: data, encoding: NSUTF8StringEncoding) {
|
||||||
var mutString = RegexMutable(dataString)
|
var mutString = RegexMutable(dataString)
|
||||||
|
|
||||||
let parsed = mutString["(\\d*):(\\d)(\\{.*\\})?"].groups()
|
let parsed = mutString["(\\d*):(\\d)(\\{.*\\})?"].groups()
|
||||||
|
|
||||||
if parsed.count == 4 {
|
if parsed.count != 4 {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
let length = parsed[1]
|
let length = parsed[1]
|
||||||
let type = parsed[2]
|
let type = parsed[2]
|
||||||
let jsonData = parsed[3].dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)
|
let jsonData = parsed[3].dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)
|
||||||
@ -181,13 +181,19 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
|
|||||||
if let json = NSJSONSerialization.JSONObjectWithData(jsonData!,
|
if let json = NSJSONSerialization.JSONObjectWithData(jsonData!,
|
||||||
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 {
|
||||||
|
// println(json)
|
||||||
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)")!)
|
if let up = json["upgrades"] as? [String] {
|
||||||
|
for available in up {
|
||||||
|
if available == "websocket" {
|
||||||
|
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")
|
||||||
@ -198,7 +204,6 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
|
|||||||
self?.pingInterval = pingInterval / 1000
|
self?.pingInterval = pingInterval / 1000
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
self?.doPoll()
|
self?.doPoll()
|
||||||
self?.startPingTimer()
|
self?.startPingTimer()
|
||||||
@ -293,12 +298,17 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
|
|||||||
// binary in base64 string
|
// binary in base64 string
|
||||||
message.removeRange(Range<String.Index>(start: message.startIndex,
|
message.removeRange(Range<String.Index>(start: message.startIndex,
|
||||||
end: advance(message.startIndex, 2)))
|
end: advance(message.startIndex, 2)))
|
||||||
}
|
|
||||||
|
|
||||||
if let data = NSData(base64EncodedString: message,
|
if let data = NSData(base64EncodedString: message,
|
||||||
options: NSDataBase64DecodingOptions.IgnoreUnknownCharacters) {
|
options: NSDataBase64DecodingOptions.IgnoreUnknownCharacters) {
|
||||||
self.client.parseSocketMessage(data)
|
self.client.parseSocketMessage(data)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
println("Got something idk what to do with")
|
||||||
|
println(message)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -314,7 +324,7 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func send(msg:AnyObject) {
|
func send(msg:AnyObject) {
|
||||||
if self.websocketConnected {
|
if self.websocket {
|
||||||
if !(msg is NSData) {
|
if !(msg is NSData) {
|
||||||
self.ws?.send("\(PacketType.MESSAGE.rawValue)\(msg)")
|
self.ws?.send("\(PacketType.MESSAGE.rawValue)\(msg)")
|
||||||
} else {
|
} else {
|
||||||
@ -377,7 +387,6 @@ 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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -391,31 +400,25 @@ 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")
|
|
||||||
self.websocketConnected = true
|
self.websocketConnected = true
|
||||||
self.probeWebSocket()
|
self.probeWebSocket()
|
||||||
}
|
}
|
||||||
|
|
||||||
// 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) {
|
||||||
println("socket closed")
|
|
||||||
self.pingTimer?.invalidate()
|
|
||||||
self.websocketConnected = false
|
self.websocketConnected = false
|
||||||
self._websocket = false
|
self._websocket = false
|
||||||
self._polling = true
|
self._polling = true
|
||||||
|
|
||||||
// Temp
|
self.client.webSocketDidCloseWithCode(code, reason: reason, wasClean: wasClean)
|
||||||
self.client.webSocket(webSocket, didCloseWithCode: code, reason: reason, wasClean: wasClean)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 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.websocketConnected = false
|
self.websocketConnected = false
|
||||||
self._websocket = false
|
self._websocket = false
|
||||||
self._polling = true
|
self._polling = true
|
||||||
|
|
||||||
// Temp
|
self.client.webSocketDidFailWithError(error)
|
||||||
self.client.webSocket(webSocket, didFailWithError: error)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -24,7 +24,7 @@
|
|||||||
|
|
||||||
import Foundation
|
import Foundation
|
||||||
|
|
||||||
class SocketIOClient: NSObject {
|
class SocketIOClient {
|
||||||
let engine:SocketEngine!
|
let engine:SocketEngine!
|
||||||
let socketURL:NSMutableString!
|
let socketURL:NSMutableString!
|
||||||
let ackQueue = dispatch_queue_create("ackQueue".cStringUsingEncoding(NSUTF8StringEncoding),
|
let ackQueue = dispatch_queue_create("ackQueue".cStringUsingEncoding(NSUTF8StringEncoding),
|
||||||
@ -84,8 +84,6 @@ class SocketIOClient: NSObject {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
super.init()
|
|
||||||
|
|
||||||
self.engine = SocketEngine(client: self)
|
self.engine = SocketEngine(client: self)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -120,6 +118,7 @@ class SocketIOClient: NSObject {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func didConnect() {
|
func didConnect() {
|
||||||
|
self.closed = false
|
||||||
self.connected = true
|
self.connected = true
|
||||||
self.connecting = false
|
self.connecting = false
|
||||||
self.reconnecting = false
|
self.reconnecting = false
|
||||||
@ -485,10 +484,7 @@ class SocketIOClient: NSObject {
|
|||||||
|
|
||||||
if stringMessage == "0" {
|
if stringMessage == "0" {
|
||||||
// connected
|
// connected
|
||||||
self.closed = false
|
self.didConnect()
|
||||||
self.connecting = false
|
|
||||||
self.reconnecting = false
|
|
||||||
self.connected = true
|
|
||||||
|
|
||||||
if self.nsp != nil {
|
if self.nsp != nil {
|
||||||
// Join namespace
|
// Join namespace
|
||||||
@ -805,26 +801,8 @@ class SocketIOClient: NSObject {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Called when the socket is opened
|
|
||||||
func webSocketDidOpen(webSocket:SRWebSocket!) {
|
|
||||||
self.closed = false
|
|
||||||
self.connecting = false
|
|
||||||
self.reconnecting = false
|
|
||||||
self.connected = true
|
|
||||||
|
|
||||||
if self.nsp != nil {
|
|
||||||
// Join namespace
|
|
||||||
self.joinNamespace()
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// Don't handle as internal because something crazy could happen where
|
|
||||||
// we disconnect before it's handled
|
|
||||||
self.handleEvent("connect", data: nil)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Called when the socket is closed
|
// Called when the socket is closed
|
||||||
func webSocket(webSocket:SRWebSocket!, didCloseWithCode code:Int, reason:String!, wasClean:Bool) {
|
func webSocketDidCloseWithCode(code:Int, reason:String!, wasClean:Bool) {
|
||||||
self.connected = false
|
self.connected = false
|
||||||
self.connecting = false
|
self.connecting = false
|
||||||
if self.closed || !self.reconnects {
|
if self.closed || !self.reconnects {
|
||||||
@ -837,7 +815,7 @@ class SocketIOClient: NSObject {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Called when an error occurs.
|
// Called when an error occurs.
|
||||||
func webSocket(webSocket:SRWebSocket!, didFailWithError error:NSError!) {
|
func webSocketDidFailWithError(error:NSError!) {
|
||||||
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)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user