better reconnects
This commit is contained in:
parent
851ac7635a
commit
44bff82a43
@ -194,7 +194,6 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let postStr = self.postWait.reduce("") {$0 + $1}
|
let postStr = self.postWait.reduce("") {$0 + $1}
|
||||||
assert(self.postWait.count != 0)
|
|
||||||
self.postWait.removeAll(keepCapacity: true)
|
self.postWait.removeAll(keepCapacity: true)
|
||||||
|
|
||||||
var req = NSMutableURLRequest(URL:
|
var req = NSMutableURLRequest(URL:
|
||||||
@ -221,7 +220,6 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
|
|||||||
|
|
||||||
self?.flushWaitingForPost()
|
self?.flushWaitingForPost()
|
||||||
self?.waitingForPost = false
|
self?.waitingForPost = false
|
||||||
self?.doPoll()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -33,21 +33,23 @@ class SocketIOClient {
|
|||||||
DISPATCH_QUEUE_SERIAL)
|
DISPATCH_QUEUE_SERIAL)
|
||||||
let emitQueue = dispatch_queue_create("emitQueue".cStringUsingEncoding(NSUTF8StringEncoding),
|
let emitQueue = dispatch_queue_create("emitQueue".cStringUsingEncoding(NSUTF8StringEncoding),
|
||||||
DISPATCH_QUEUE_SERIAL)
|
DISPATCH_QUEUE_SERIAL)
|
||||||
private lazy var params:[String: AnyObject] = [String: AnyObject]()
|
let reconnectAttempts:Int!
|
||||||
|
private lazy var params = [String: AnyObject]()
|
||||||
private var ackHandlers = [SocketAckHandler]()
|
private var ackHandlers = [SocketAckHandler]()
|
||||||
private var currentAck = -1
|
private var currentAck = -1
|
||||||
|
private var currentReconnectAttempt = 0
|
||||||
private var forcePolling = false
|
private var forcePolling = false
|
||||||
private var handlers = [SocketEventHandler]()
|
private var handlers = [SocketEventHandler]()
|
||||||
private var waitingData = [SocketEvent]()
|
private var waitingData = [SocketEvent]()
|
||||||
private var paramConnect = false
|
private var paramConnect = false
|
||||||
private var _secure = false
|
private var _secure = false
|
||||||
|
private var reconnectTimer:NSTimer?
|
||||||
var closed = false
|
var closed = false
|
||||||
var connected = false
|
var connected = false
|
||||||
var connecting = false
|
var connecting = false
|
||||||
var nsp:String?
|
var nsp:String?
|
||||||
var reconnects = true
|
var reconnects = true
|
||||||
var reconnecting = false
|
var reconnecting = false
|
||||||
var reconnectAttempts = -1
|
|
||||||
var reconnectWait = 10
|
var reconnectWait = 10
|
||||||
var secure:Bool {
|
var secure:Bool {
|
||||||
return self._secure
|
return self._secure
|
||||||
@ -65,6 +67,7 @@ class SocketIOClient {
|
|||||||
mutURL = mutURL["https://"] ~= ""
|
mutURL = mutURL["https://"] ~= ""
|
||||||
|
|
||||||
self.socketURL = mutURL
|
self.socketURL = mutURL
|
||||||
|
self.reconnectAttempts = -1
|
||||||
|
|
||||||
// Set options
|
// Set options
|
||||||
if opts != nil {
|
if opts != nil {
|
||||||
@ -129,6 +132,9 @@ class SocketIOClient {
|
|||||||
self.connected = true
|
self.connected = true
|
||||||
self.connecting = false
|
self.connecting = false
|
||||||
self.reconnecting = false
|
self.reconnecting = false
|
||||||
|
self.currentReconnectAttempt = 0
|
||||||
|
self.reconnectTimer?.invalidate()
|
||||||
|
self.reconnectTimer = nil
|
||||||
self.handleEvent("connect", data: nil, isInternalMessage: false)
|
self.handleEvent("connect", data: nil, isInternalMessage: false)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -764,16 +770,15 @@ class SocketIOClient {
|
|||||||
// Something happened while polling
|
// Something happened while polling
|
||||||
func pollingDidFail(err:NSError?) {
|
func pollingDidFail(err:NSError?) {
|
||||||
if !self.reconnecting {
|
if !self.reconnecting {
|
||||||
|
self.connected = false
|
||||||
self.handleEvent("reconnect", data: err?.localizedDescription, isInternalMessage: true)
|
self.handleEvent("reconnect", data: err?.localizedDescription, isInternalMessage: true)
|
||||||
self.tryReconnect(triesLeft: self.reconnectAttempts)
|
self.tryReconnect()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// We lost connection and should attempt to reestablish
|
// We lost connection and should attempt to reestablish
|
||||||
func tryReconnect(var #triesLeft:Int) {
|
@objc func tryReconnect() {
|
||||||
self.connected = false
|
if self.reconnectAttempts != -1 && self.currentReconnectAttempt + 1 > self.reconnectAttempts {
|
||||||
|
|
||||||
if triesLeft != -1 && triesLeft <= 0 {
|
|
||||||
self.didForceClose()
|
self.didForceClose()
|
||||||
return
|
return
|
||||||
} else if self.connected {
|
} else if self.connected {
|
||||||
@ -782,26 +787,25 @@ class SocketIOClient {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// println("Trying to reconnect #\(reconnectAttempts - triesLeft)")
|
if self.reconnectTimer == nil {
|
||||||
self.handleEvent("reconnectAttempt", data: triesLeft - 1, isInternalMessage: true)
|
self.reconnecting = true
|
||||||
|
dispatch_async(dispatch_get_main_queue()) {[weak self] in
|
||||||
let waitTime = UInt64(self.reconnectWait) * NSEC_PER_SEC
|
if self == nil {
|
||||||
let time = dispatch_time(DISPATCH_TIME_NOW, Int64(waitTime))
|
return
|
||||||
|
}
|
||||||
// Wait reconnectWait seconds and then check if connected. Repeat if not
|
|
||||||
dispatch_after(time, dispatch_get_main_queue()) {[weak self] in
|
self?.reconnectTimer = NSTimer.scheduledTimerWithTimeInterval(Double(self!.reconnectWait),
|
||||||
if self == nil || self!.connected || self!.closed {
|
target: self!, selector: "tryReconnect", userInfo: nil, repeats: true)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if triesLeft != -1 {
|
return
|
||||||
triesLeft = triesLeft - 1
|
|
||||||
}
|
|
||||||
|
|
||||||
self!.tryReconnect(triesLeft: triesLeft)
|
|
||||||
}
|
}
|
||||||
self.reconnecting = true
|
|
||||||
|
|
||||||
|
self.handleEvent("reconnectAttempt", data: self.reconnectAttempts - self.currentReconnectAttempt,
|
||||||
|
isInternalMessage: true)
|
||||||
|
|
||||||
|
self.currentReconnectAttempt++
|
||||||
if self.paramConnect {
|
if self.paramConnect {
|
||||||
self.connectWithParams(self.params)
|
self.connectWithParams(self.params)
|
||||||
} else {
|
} else {
|
||||||
@ -817,7 +821,7 @@ class SocketIOClient {
|
|||||||
self.didForceClose()
|
self.didForceClose()
|
||||||
} else {
|
} else {
|
||||||
self.handleEvent("reconnect", data: reason, isInternalMessage: true)
|
self.handleEvent("reconnect", data: reason, isInternalMessage: true)
|
||||||
self.tryReconnect(triesLeft: self.reconnectAttempts)
|
self.tryReconnect()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -830,7 +834,7 @@ class SocketIOClient {
|
|||||||
self.didForceClose()
|
self.didForceClose()
|
||||||
} else if !self.reconnecting {
|
} else if !self.reconnecting {
|
||||||
self.handleEvent("reconnect", data: error.localizedDescription, isInternalMessage: true)
|
self.handleEvent("reconnect", data: error.localizedDescription, isInternalMessage: true)
|
||||||
self.tryReconnect(triesLeft: self.reconnectAttempts)
|
self.tryReconnect()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user