tweaks to polling

This commit is contained in:
Erik 2015-09-30 09:26:23 -04:00
parent 798d8a62ae
commit 718dc27089

View File

@ -41,6 +41,7 @@ public final class SocketEngine: NSObject, WebSocketDelegate {
private var fastUpgrade = false private var fastUpgrade = false
private var forcePolling = false private var forcePolling = false
private var forceWebsockets = false private var forceWebsockets = false
private var invalidated = false
private var pingInterval: Double? private var pingInterval: Double?
private var pingTimer: NSTimer? private var pingTimer: NSTimer?
private var pingTimeout = 0.0 { private var pingTimeout = 0.0 {
@ -99,6 +100,7 @@ public final class SocketEngine: NSObject, WebSocketDelegate {
deinit { deinit {
Logger.log("Engine is being deinit", type: logType) Logger.log("Engine is being deinit", type: logType)
closed = true
stopPolling() stopPolling()
} }
@ -248,19 +250,23 @@ public final class SocketEngine: NSObject, WebSocketDelegate {
} }
} }
doRequest(req) doLongPoll(req)
} }
private func doRequest(req: NSMutableURLRequest) { private func doRequest(req: NSMutableURLRequest,
if !polling || closed { withCallback callback: (NSData?, NSURLResponse?, NSError?) -> Void) {
return if !polling || closed || invalidated {
} return
}
req.cachePolicy = NSURLRequestCachePolicy.ReloadIgnoringLocalAndRemoteCacheData Logger.log("Doing polling request", type: logType)
Logger.log("Doing polling request", type: logType) req.cachePolicy = NSURLRequestCachePolicy.ReloadIgnoringLocalAndRemoteCacheData
session.dataTaskWithRequest(req, completionHandler: callback).resume()
}
session.dataTaskWithRequest(req) {[weak self] data, res, err in private func doLongPoll(req: NSMutableURLRequest) {
doRequest(req) {[weak self] data, res, err in
if let this = self { if let this = self {
if err != nil || data == nil { if err != nil || data == nil {
if this.polling { if this.polling {
@ -286,7 +292,8 @@ public final class SocketEngine: NSObject, WebSocketDelegate {
} else if !this.closed && this.polling { } else if !this.closed && this.polling {
this.doPoll() this.doPoll()
} }
}}.resume() }
}
} }
private func flushProbeWait() { private func flushProbeWait() {
@ -345,13 +352,13 @@ public final class SocketEngine: NSObject, WebSocketDelegate {
Logger.log("POSTing: %@", type: logType, args: postStr) Logger.log("POSTing: %@", type: logType, args: postStr)
session.dataTaskWithRequest(req) {[weak self] data, res, err in doRequest(req) {[weak self] data, res, err in
if let this = self { if let this = self {
if err != nil && this.polling { if err != nil && this.polling {
this.handlePollingFailed(err?.localizedDescription ?? "Error") this.handlePollingFailed(err?.localizedDescription ?? "Error")
return return
} else if err != nil { } else if err != nil {
NSLog(err?.localizedDescription ?? "Error") Logger.error(err?.localizedDescription ?? "Error", type: this.logType)
return return
} }
@ -363,7 +370,8 @@ public final class SocketEngine: NSObject, WebSocketDelegate {
this?.doPoll() this?.doPoll()
} }
} }
}}.resume() }
}
} }
// We had packets waiting for send when we upgraded // We had packets waiting for send when we upgraded
@ -488,7 +496,7 @@ public final class SocketEngine: NSObject, WebSocketDelegate {
} }
} }
doRequest(reqPolling) doLongPoll(reqPolling)
} }
private func parsePollingMessage(str: String) { private func parsePollingMessage(str: String) {
@ -627,6 +635,7 @@ public final class SocketEngine: NSObject, WebSocketDelegate {
} }
func stopPolling() { func stopPolling() {
invalidated = true
session.finishTasksAndInvalidate() session.finishTasksAndInvalidate()
} }