add refresh
This commit is contained in:
parent
41adedee40
commit
defcdeec33
@ -86,6 +86,23 @@ final class SocketService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@discardableResult
|
||||||
|
private func refreshAuthTokenIfNeeded(disconnectIfMissing: Bool) -> Bool {
|
||||||
|
let storedToken = resolveCurrentAccessToken()
|
||||||
|
|
||||||
|
guard let token = storedToken, !token.isEmpty else {
|
||||||
|
guard disconnectIfMissing else { return false }
|
||||||
|
currentToken = nil
|
||||||
|
disconnectInternal()
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
guard token != currentToken else { return false }
|
||||||
|
|
||||||
|
connectInternal(with: token)
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
private func resolveCurrentAccessToken() -> String? {
|
private func resolveCurrentAccessToken() -> String? {
|
||||||
guard
|
guard
|
||||||
let login = UserDefaults.standard.string(forKey: "currentUser"),
|
let login = UserDefaults.standard.string(forKey: "currentUser"),
|
||||||
@ -172,11 +189,13 @@ final class SocketService {
|
|||||||
|
|
||||||
socket.on(clientEvent: .reconnect) { _, _ in
|
socket.on(clientEvent: .reconnect) { _, _ in
|
||||||
if AppConfig.DEBUG { print("[SocketService] Reconnecting") }
|
if AppConfig.DEBUG { print("[SocketService] Reconnecting") }
|
||||||
|
if self.refreshAuthTokenIfNeeded(disconnectIfMissing: true) { return }
|
||||||
self.updateConnectionState(.connecting)
|
self.updateConnectionState(.connecting)
|
||||||
}
|
}
|
||||||
|
|
||||||
socket.on(clientEvent: .reconnectAttempt) { data, _ in
|
socket.on(clientEvent: .reconnectAttempt) { data, _ in
|
||||||
if AppConfig.DEBUG { print("[SocketService] Reconnect attempt: \(data)") }
|
if AppConfig.DEBUG { print("[SocketService] Reconnect attempt: \(data)") }
|
||||||
|
if self.refreshAuthTokenIfNeeded(disconnectIfMissing: true) { return }
|
||||||
self.updateConnectionState(.connecting)
|
self.updateConnectionState(.connecting)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -233,6 +252,8 @@ final class SocketService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private func performHeartbeatCheck() {
|
private func performHeartbeatCheck() {
|
||||||
|
if refreshAuthTokenIfNeeded(disconnectIfMissing: true) { return }
|
||||||
|
|
||||||
guard let socket = socket else {
|
guard let socket = socket else {
|
||||||
updateConnectionState(.disconnected)
|
updateConnectionState(.disconnected)
|
||||||
return
|
return
|
||||||
@ -245,6 +266,7 @@ final class SocketService {
|
|||||||
updateConnectionState(.connecting)
|
updateConnectionState(.connecting)
|
||||||
case .disconnected, .notConnected:
|
case .disconnected, .notConnected:
|
||||||
updateConnectionState(.connecting)
|
updateConnectionState(.connecting)
|
||||||
|
if refreshAuthTokenIfNeeded(disconnectIfMissing: true) { return }
|
||||||
socket.connect(withPayload: currentAuthPayload)
|
socket.connect(withPayload: currentAuthPayload)
|
||||||
@unknown default:
|
@unknown default:
|
||||||
updateConnectionState(.connecting)
|
updateConnectionState(.connecting)
|
||||||
@ -313,6 +335,7 @@ final class SocketService {
|
|||||||
|
|
||||||
consecutiveHeartbeatMisses = 0
|
consecutiveHeartbeatMisses = 0
|
||||||
updateConnectionState(.connecting)
|
updateConnectionState(.connecting)
|
||||||
|
if refreshAuthTokenIfNeeded(disconnectIfMissing: true) { return }
|
||||||
socket.disconnect()
|
socket.disconnect()
|
||||||
socket.connect(withPayload: currentAuthPayload)
|
socket.connect(withPayload: currentAuthPayload)
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user