tweaks
This commit is contained in:
parent
14bf64233b
commit
6399df4c33
@ -151,29 +151,29 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
|
|||||||
self.waitingForPoll = true
|
self.waitingForPoll = true
|
||||||
|
|
||||||
self.session.dataTaskWithRequest(req) {[weak self] data, res, err in
|
self.session.dataTaskWithRequest(req) {[weak self] data, res, err in
|
||||||
if self == nil {
|
if self == nil {
|
||||||
return
|
return
|
||||||
} else if err != nil {
|
} else if err != nil {
|
||||||
if self!.polling {
|
if self!.polling {
|
||||||
self?.handlePollingFailed(err)
|
self?.handlePollingFailed(err)
|
||||||
}
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// println(data)
|
||||||
|
|
||||||
|
if let str = NSString(data: data, encoding: NSUTF8StringEncoding) as? String {
|
||||||
|
// println(str)
|
||||||
|
|
||||||
|
dispatch_async(self?.parseQueue) {[weak self] in
|
||||||
|
self?.parsePollingMessage(str)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
}
|
||||||
// println(data)
|
|
||||||
|
self?.waitingForPoll = false
|
||||||
if let str = NSString(data: data, encoding: NSUTF8StringEncoding) as? String {
|
self?.doPoll()
|
||||||
// println(str)
|
}.resume()
|
||||||
|
|
||||||
dispatch_async(self?.parseQueue) {[weak self] in
|
|
||||||
self?.parsePollingMessage(str)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
self?.waitingForPoll = false
|
|
||||||
self?.doPoll()
|
|
||||||
}.resume()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private func flushProbeWait() {
|
private func flushProbeWait() {
|
||||||
@ -229,12 +229,16 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
|
|||||||
self?.handlePollingFailed(err)
|
self?.handlePollingFailed(err)
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
|
} else if self == nil {
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
self?.flushWaitingForPost()
|
|
||||||
self?.waitingForPost = false
|
self?.waitingForPost = false
|
||||||
self?.doPoll()
|
dispatch_async(self!.emitQueue) {
|
||||||
}.resume()
|
self?.flushWaitingForPost()
|
||||||
|
self?.doPoll()
|
||||||
|
return
|
||||||
|
}}.resume()
|
||||||
}
|
}
|
||||||
|
|
||||||
// We had packets waiting for send when we upgraded
|
// We had packets waiting for send when we upgraded
|
||||||
@ -252,6 +256,7 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
|
|||||||
private func handlePollingFailed(reason:NSError?) {
|
private func handlePollingFailed(reason:NSError?) {
|
||||||
if !self.client.reconnecting {
|
if !self.client.reconnecting {
|
||||||
self.connected = false
|
self.connected = false
|
||||||
|
self.ws?.close()
|
||||||
self.pingTimer?.invalidate()
|
self.pingTimer?.invalidate()
|
||||||
self.waitingForPoll = false
|
self.waitingForPoll = false
|
||||||
self.waitingForPost = false
|
self.waitingForPost = false
|
||||||
@ -271,61 +276,58 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
|
|||||||
let reqPolling = NSURLRequest(URL: NSURL(string: urlPolling + "&b64=1")!)
|
let reqPolling = NSURLRequest(URL: NSURL(string: urlPolling + "&b64=1")!)
|
||||||
|
|
||||||
self.session.dataTaskWithRequest(reqPolling) {[weak self] data, res, err in
|
self.session.dataTaskWithRequest(reqPolling) {[weak self] data, res, err in
|
||||||
var err:NSError?
|
var err2:NSError?
|
||||||
if self == nil {
|
if self == nil {
|
||||||
return
|
return
|
||||||
} else if err != nil || data == nil {
|
} else if err != nil || data == nil {
|
||||||
if self!.polling {
|
self?.handlePollingFailed(err)
|
||||||
self?.handlePollingFailed(err)
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if let dataString = NSString(data: data, encoding: NSUTF8StringEncoding) {
|
||||||
|
var mutString = RegexMutable(dataString)
|
||||||
|
let parsed:[String]? = mutString["(\\d*):(\\d)(\\{.*\\})?"].groups()
|
||||||
|
|
||||||
|
if parsed == nil || parsed?.count != 4 {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if let dataString = NSString(data: data, encoding: NSUTF8StringEncoding) {
|
let length = parsed![1]
|
||||||
var mutString = RegexMutable(dataString)
|
let type = parsed![2]
|
||||||
let parsed = mutString["(\\d*):(\\d)(\\{.*\\})?"].groups()
|
let jsonData = parsed![3].dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)
|
||||||
|
|
||||||
if parsed.count != 4 {
|
if type != "0" {
|
||||||
return
|
NSLog("Error handshaking")
|
||||||
}
|
return
|
||||||
|
|
||||||
let length = parsed[1]
|
|
||||||
let type = parsed[2]
|
|
||||||
let jsonData = parsed[3].dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)
|
|
||||||
|
|
||||||
if type != "0" {
|
|
||||||
NSLog("Error handshaking")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
self?.connected = true
|
|
||||||
|
|
||||||
if let json = NSJSONSerialization.JSONObjectWithData(jsonData!,
|
|
||||||
options: NSJSONReadingOptions.AllowFragments, error: &err) as? NSDictionary {
|
|
||||||
if let sid = json["sid"] as? String {
|
|
||||||
// println(json)
|
|
||||||
self?.sid = sid
|
|
||||||
|
|
||||||
if !self!.forcePolling {
|
|
||||||
self?.ws = SRWebSocket(URL:
|
|
||||||
NSURL(string: urlWebSocket + "&sid=\(self!.sid)")!)
|
|
||||||
self?.ws?.delegate = self
|
|
||||||
self?.ws?.open()
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
NSLog("Error handshaking")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if let pingInterval = json["pingInterval"] as? Int {
|
|
||||||
self?.pingInterval = pingInterval / 1000
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
self?.doPoll()
|
|
||||||
self?.startPingTimer()
|
|
||||||
}
|
}
|
||||||
}.resume()
|
|
||||||
|
self?.connected = true
|
||||||
|
|
||||||
|
if let json = NSJSONSerialization.JSONObjectWithData(jsonData!,
|
||||||
|
options: NSJSONReadingOptions.AllowFragments, error: &err2) as? NSDictionary {
|
||||||
|
if let sid = json["sid"] as? String {
|
||||||
|
// println(json)
|
||||||
|
self?.sid = sid
|
||||||
|
|
||||||
|
if !self!.forcePolling {
|
||||||
|
self?.ws = SRWebSocket(URL:
|
||||||
|
NSURL(string: urlWebSocket + "&sid=\(self!.sid)")!)
|
||||||
|
self?.ws?.delegate = self
|
||||||
|
self?.ws?.open()
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
NSLog("Error handshaking")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if let pingInterval = json["pingInterval"] as? Int {
|
||||||
|
self?.pingInterval = pingInterval / 1000
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
self?.doPoll()
|
||||||
|
self?.startPingTimer()
|
||||||
|
}}.resume()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Translatation of engine.io-parser#decodePayload
|
// Translatation of engine.io-parser#decodePayload
|
||||||
@ -525,7 +527,7 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
|
|||||||
if self.pingInterval == nil {
|
if self.pingInterval == nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
self.pingTimer?.invalidate()
|
self.pingTimer?.invalidate()
|
||||||
dispatch_async(dispatch_get_main_queue()) {
|
dispatch_async(dispatch_get_main_queue()) {
|
||||||
self.pingTimer = NSTimer.scheduledTimerWithTimeInterval(NSTimeInterval(self.pingInterval!), target: self,
|
self.pingTimer = NSTimer.scheduledTimerWithTimeInterval(NSTimeInterval(self.pingInterval!), target: self,
|
||||||
|
|||||||
@ -45,6 +45,9 @@ class SocketEventHandler {
|
|||||||
|
|
||||||
func executeCallback(_ items:NSArray? = nil, withAck ack:Int? = nil, withAckType type:Int? = nil,
|
func executeCallback(_ items:NSArray? = nil, withAck ack:Int? = nil, withAckType type:Int? = nil,
|
||||||
withSocket socket:SocketIOClient? = nil) {
|
withSocket socket:SocketIOClient? = nil) {
|
||||||
callback?(items, ack != nil ? emitAckCallback(socket!, ack!, type!) : nil)
|
dispatch_async(dispatch_get_main_queue()) {[weak self] in
|
||||||
|
self?.callback?(items, ack != nil ? emitAckCallback(socket!, ack!, type!) : nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -280,30 +280,28 @@ class SocketIOClient {
|
|||||||
}
|
}
|
||||||
for handler in self.handlers {
|
for handler in self.handlers {
|
||||||
if handler.event == event {
|
if handler.event == event {
|
||||||
dispatch_async(dispatch_get_main_queue()) {
|
if data is NSArray {
|
||||||
if data is NSArray {
|
if ack != nil {
|
||||||
if ack != nil {
|
handler.executeCallback(data as? NSArray, withAck: ack!,
|
||||||
handler.executeCallback(data as? NSArray, withAck: ack!,
|
withAckType: ackType, withSocket: self)
|
||||||
withAckType: ackType, withSocket: self)
|
|
||||||
} else {
|
|
||||||
handler.executeCallback(data as? NSArray)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
|
handler.executeCallback(data as? NSArray)
|
||||||
// Trying to do a ternary expression in the executeCallback method
|
}
|
||||||
// seemed to crash Swift
|
} else {
|
||||||
var dataArr:NSArray? = nil
|
|
||||||
|
// Trying to do a ternary expression in the executeCallback method
|
||||||
if let data:AnyObject = data {
|
// seemed to crash Swift
|
||||||
dataArr = [data]
|
var dataArr:NSArray? = nil
|
||||||
}
|
|
||||||
|
if let data:AnyObject = data {
|
||||||
if ack != nil {
|
dataArr = [data]
|
||||||
handler.executeCallback(dataArr, withAck: ack!,
|
}
|
||||||
withAckType: ackType, withSocket: self)
|
|
||||||
} else {
|
if ack != nil {
|
||||||
handler.executeCallback(dataArr)
|
handler.executeCallback(dataArr, withAck: ack!,
|
||||||
}
|
withAckType: ackType, withSocket: self)
|
||||||
|
} else {
|
||||||
|
handler.executeCallback(dataArr)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user