Skip to content

Commit 4940963

Browse files
committed
Use websocketDidConnect delegate method. Add properties to connection
to track whether the socket delegate has been called and whether the connection_established event has been received from Pusher.
1 parent 1b79c41 commit 4940963

File tree

2 files changed

+41
-9
lines changed

2 files changed

+41
-9
lines changed

Source/PusherConnection.swift

Lines changed: 35 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,17 @@ open class PusherConnection: NSObject {
2525
open weak var delegate: PusherDelegate?
2626
internal var reconnectTimer: Timer? = nil
2727

28+
open var socketConnected: Bool = false {
29+
didSet {
30+
updateConnectionStateAndAttemptSubscriptions()
31+
}
32+
}
33+
open var connectionEstablishedMessageReceived: Bool = false {
34+
didSet {
35+
updateConnectionStateAndAttemptSubscriptions()
36+
}
37+
}
38+
2839
open lazy var reachability: Reachability? = {
2940
let reachability = Reachability.init()
3041
reachability?.whenReachable = { [unowned self] reachability in
@@ -262,6 +273,16 @@ open class PusherConnection: NSObject {
262273
self.delegate?.changedConnectionState?(from: oldState, to: newState)
263274
}
264275

276+
/**
277+
Update connection state and attempt subscriptions to unsubscribed channels
278+
*/
279+
fileprivate func updateConnectionStateAndAttemptSubscriptions() {
280+
if self.connectionEstablishedMessageReceived && self.socketConnected && self.connectionState != .connected {
281+
updateConnectionState(to: .connected)
282+
attemptSubscriptionsToUnsubscribedChannels()
283+
}
284+
}
285+
265286
/**
266287
Handle setting channel state and triggering unsent client events, if applicable,
267288
upon receiving a successful subscription event
@@ -307,17 +328,23 @@ open class PusherConnection: NSObject {
307328
if let data = json["data"] as? String {
308329
if let connectionData = getPusherEventJSON(from: data), let socketId = connectionData["socket_id"] as? String {
309330
self.socketId = socketId
310-
updateConnectionState(to: .connected)
311-
312331
self.reconnectAttempts = 0
313332
self.reconnectTimer?.invalidate()
314333

315-
for (_, channel) in self.channels.channels {
316-
if !channel.subscribed {
317-
if !self.authorize(channel) {
318-
print("Unable to subscribe to channel: \(channel.name)")
319-
}
320-
}
334+
self.connectionEstablishedMessageReceived = true
335+
}
336+
}
337+
}
338+
339+
/**
340+
Attempts to make subscriptions that couldn't be attempted while the
341+
connection was not in a connected state
342+
*/
343+
fileprivate func attemptSubscriptionsToUnsubscribedChannels() {
344+
for (_, channel) in self.channels.channels {
345+
if !channel.subscribed {
346+
if !self.authorize(channel) {
347+
print("Unable to subscribe to channel: \(channel.name)")
321348
}
322349
}
323350
}

Source/PusherWebsocketDelegate.swift

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,9 @@ extension PusherConnection: WebSocketDelegate {
3838
}
3939
}
4040

41+
self.connectionEstablishedMessageReceived = false
42+
self.socketConnected = false
43+
4144
// Handle error (if any)
4245
guard let error = error, error.code != Int(WebSocket.CloseCode.normal.rawValue) else {
4346
self.delegate?.debugLog?(message: "[PUSHER DEBUG] Deliberate disconnection - skipping reconnect attempts")
@@ -102,7 +105,9 @@ extension PusherConnection: WebSocketDelegate {
102105
reconnectAttempts += 1
103106
}
104107

108+
public func websocketDidConnect(socket ws: WebSocket) {
109+
self.socketConnected = true
110+
}
105111

106-
public func websocketDidConnect(socket ws: WebSocket) {}
107112
public func websocketDidReceiveData(socket ws: WebSocket, data: Data) {}
108113
}

0 commit comments

Comments
 (0)