Skip to content

Commit 73dee92

Browse files
authored
Merge pull request #61 from Boltmade/more_reliable_reconnect
More reliable reconnect
2 parents 9ccf54e + 102b170 commit 73dee92

File tree

2 files changed

+18
-0
lines changed

2 files changed

+18
-0
lines changed

Source/PusherConnection.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,18 @@ public class PusherConnection {
1717
public var socket: WebSocket!
1818
public var URLSession: NSURLSession
1919
public weak var stateChangeDelegate: ConnectionStateChangeDelegate?
20+
internal var reconnectOperation: NSOperation?
2021

2122
public lazy var reachability: Reachability? = {
2223
let reachability = try? Reachability.reachabilityForInternetConnection()
2324
reachability?.whenReachable = { [unowned self] reachability in
25+
self.reconnectOperation?.cancel()
2426
if self.connectionState == .Disconnected {
2527
self.socket.connect()
2628
}
2729
}
2830
reachability?.whenUnreachable = { [unowned self] reachability in
31+
self.reconnectOperation?.cancel()
2932
print("Network unreachable")
3033
}
3134
return reachability

Source/PusherWebsocketDelegate.swift

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,21 @@ extension PusherConnection: WebSocketDelegate {
3939
for (_, channel) in self.channels.channels {
4040
channel.subscribed = false
4141
}
42+
43+
if let reconnect = self.options.autoReconnect where reconnect {
44+
if let reachability = self.reachability where reachability.isReachable() {
45+
let operation = NSBlockOperation {
46+
self.socket.connect()
47+
}
48+
49+
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, Int64(NSEC_PER_SEC)), dispatch_get_main_queue()) {
50+
NSOperationQueue.mainQueue().addOperation(operation)
51+
}
52+
53+
self.reconnectOperation?.cancel()
54+
self.reconnectOperation = operation
55+
}
56+
}
4257
}
4358

4459
public func websocketDidConnect(ws: WebSocket) {}

0 commit comments

Comments
 (0)