add refresh

This commit is contained in:
cheykrym 2025-10-21 05:27:37 +03:00
parent 41adedee40
commit defcdeec33

View File

@ -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? {
guard
let login = UserDefaults.standard.string(forKey: "currentUser"),
@ -172,11 +189,13 @@ final class SocketService {
socket.on(clientEvent: .reconnect) { _, _ in
if AppConfig.DEBUG { print("[SocketService] Reconnecting") }
if self.refreshAuthTokenIfNeeded(disconnectIfMissing: true) { return }
self.updateConnectionState(.connecting)
}
socket.on(clientEvent: .reconnectAttempt) { data, _ in
if AppConfig.DEBUG { print("[SocketService] Reconnect attempt: \(data)") }
if self.refreshAuthTokenIfNeeded(disconnectIfMissing: true) { return }
self.updateConnectionState(.connecting)
}
@ -233,6 +252,8 @@ final class SocketService {
}
private func performHeartbeatCheck() {
if refreshAuthTokenIfNeeded(disconnectIfMissing: true) { return }
guard let socket = socket else {
updateConnectionState(.disconnected)
return
@ -245,6 +266,7 @@ final class SocketService {
updateConnectionState(.connecting)
case .disconnected, .notConnected:
updateConnectionState(.connecting)
if refreshAuthTokenIfNeeded(disconnectIfMissing: true) { return }
socket.connect(withPayload: currentAuthPayload)
@unknown default:
updateConnectionState(.connecting)
@ -313,6 +335,7 @@ final class SocketService {
consecutiveHeartbeatMisses = 0
updateConnectionState(.connecting)
if refreshAuthTokenIfNeeded(disconnectIfMissing: true) { return }
socket.disconnect()
socket.connect(withPayload: currentAuthPayload)
}