tweaks to polling
This commit is contained in:
parent
798d8a62ae
commit
718dc27089
@ -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) {
|
||||||
|
if !polling || closed || invalidated {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
req.cachePolicy = NSURLRequestCachePolicy.ReloadIgnoringLocalAndRemoteCacheData
|
|
||||||
|
|
||||||
Logger.log("Doing polling request", type: logType)
|
Logger.log("Doing polling request", type: logType)
|
||||||
|
|
||||||
session.dataTaskWithRequest(req) {[weak self] data, res, err in
|
req.cachePolicy = NSURLRequestCachePolicy.ReloadIgnoringLocalAndRemoteCacheData
|
||||||
|
session.dataTaskWithRequest(req, completionHandler: callback).resume()
|
||||||
|
}
|
||||||
|
|
||||||
|
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()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user