Skip to content

Commit 44bff82

Browse files
committed
better reconnects
1 parent 851ac76 commit 44bff82

File tree

2 files changed

+28
-26
lines changed

2 files changed

+28
-26
lines changed

SwiftIO/SocketEngine.swift

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,6 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
194194
}
195195

196196
let postStr = self.postWait.reduce("") {$0 + $1}
197-
assert(self.postWait.count != 0)
198197
self.postWait.removeAll(keepCapacity: true)
199198

200199
var req = NSMutableURLRequest(URL:
@@ -221,7 +220,6 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
221220

222221
self?.flushWaitingForPost()
223222
self?.waitingForPost = false
224-
self?.doPoll()
225223
}
226224
}
227225

SwiftIO/SocketIOClient.swift

Lines changed: 28 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -33,21 +33,23 @@ class SocketIOClient {
3333
DISPATCH_QUEUE_SERIAL)
3434
let emitQueue = dispatch_queue_create("emitQueue".cStringUsingEncoding(NSUTF8StringEncoding),
3535
DISPATCH_QUEUE_SERIAL)
36-
private lazy var params:[String: AnyObject] = [String: AnyObject]()
36+
let reconnectAttempts:Int!
37+
private lazy var params = [String: AnyObject]()
3738
private var ackHandlers = [SocketAckHandler]()
3839
private var currentAck = -1
40+
private var currentReconnectAttempt = 0
3941
private var forcePolling = false
4042
private var handlers = [SocketEventHandler]()
4143
private var waitingData = [SocketEvent]()
4244
private var paramConnect = false
4345
private var _secure = false
46+
private var reconnectTimer:NSTimer?
4447
var closed = false
4548
var connected = false
4649
var connecting = false
4750
var nsp:String?
4851
var reconnects = true
4952
var reconnecting = false
50-
var reconnectAttempts = -1
5153
var reconnectWait = 10
5254
var secure:Bool {
5355
return self._secure
@@ -65,6 +67,7 @@ class SocketIOClient {
6567
mutURL = mutURL["https://"] ~= ""
6668

6769
self.socketURL = mutURL
70+
self.reconnectAttempts = -1
6871

6972
// Set options
7073
if opts != nil {
@@ -129,6 +132,9 @@ class SocketIOClient {
129132
self.connected = true
130133
self.connecting = false
131134
self.reconnecting = false
135+
self.currentReconnectAttempt = 0
136+
self.reconnectTimer?.invalidate()
137+
self.reconnectTimer = nil
132138
self.handleEvent("connect", data: nil, isInternalMessage: false)
133139
}
134140

@@ -764,16 +770,15 @@ class SocketIOClient {
764770
// Something happened while polling
765771
func pollingDidFail(err:NSError?) {
766772
if !self.reconnecting {
773+
self.connected = false
767774
self.handleEvent("reconnect", data: err?.localizedDescription, isInternalMessage: true)
768-
self.tryReconnect(triesLeft: self.reconnectAttempts)
775+
self.tryReconnect()
769776
}
770777
}
771778

772779
// We lost connection and should attempt to reestablish
773-
func tryReconnect(var #triesLeft:Int) {
774-
self.connected = false
775-
776-
if triesLeft != -1 && triesLeft <= 0 {
780+
@objc func tryReconnect() {
781+
if self.reconnectAttempts != -1 && self.currentReconnectAttempt + 1 > self.reconnectAttempts {
777782
self.didForceClose()
778783
return
779784
} else if self.connected {
@@ -782,26 +787,25 @@ class SocketIOClient {
782787
return
783788
}
784789

785-
// println("Trying to reconnect #\(reconnectAttempts - triesLeft)")
786-
self.handleEvent("reconnectAttempt", data: triesLeft - 1, isInternalMessage: true)
787-
788-
let waitTime = UInt64(self.reconnectWait) * NSEC_PER_SEC
789-
let time = dispatch_time(DISPATCH_TIME_NOW, Int64(waitTime))
790-
791-
// Wait reconnectWait seconds and then check if connected. Repeat if not
792-
dispatch_after(time, dispatch_get_main_queue()) {[weak self] in
793-
if self == nil || self!.connected || self!.closed {
790+
if self.reconnectTimer == nil {
791+
self.reconnecting = true
792+
dispatch_async(dispatch_get_main_queue()) {[weak self] in
793+
if self == nil {
794+
return
795+
}
796+
797+
self?.reconnectTimer = NSTimer.scheduledTimerWithTimeInterval(Double(self!.reconnectWait),
798+
target: self!, selector: "tryReconnect", userInfo: nil, repeats: true)
794799
return
795800
}
796801

797-
if triesLeft != -1 {
798-
triesLeft = triesLeft - 1
799-
}
800-
801-
self!.tryReconnect(triesLeft: triesLeft)
802+
return
802803
}
803-
self.reconnecting = true
804804

805+
self.handleEvent("reconnectAttempt", data: self.reconnectAttempts - self.currentReconnectAttempt,
806+
isInternalMessage: true)
807+
808+
self.currentReconnectAttempt++
805809
if self.paramConnect {
806810
self.connectWithParams(self.params)
807811
} else {
@@ -817,7 +821,7 @@ class SocketIOClient {
817821
self.didForceClose()
818822
} else {
819823
self.handleEvent("reconnect", data: reason, isInternalMessage: true)
820-
self.tryReconnect(triesLeft: self.reconnectAttempts)
824+
self.tryReconnect()
821825
}
822826
}
823827

@@ -830,7 +834,7 @@ class SocketIOClient {
830834
self.didForceClose()
831835
} else if !self.reconnecting {
832836
self.handleEvent("reconnect", data: error.localizedDescription, isInternalMessage: true)
833-
self.tryReconnect(triesLeft: self.reconnectAttempts)
837+
self.tryReconnect()
834838
}
835839
}
836840
}

0 commit comments

Comments
 (0)