Fix websocket reconnection

sync2
Laurent 12 months ago
parent e625e39eb2
commit f6418a725a
  1. 12
      LeStorage/WebSocketManager.swift

@ -14,20 +14,22 @@ class WebSocketManager: ObservableObject {
private var webSocketTask: URLSessionWebSocketTask? private var webSocketTask: URLSessionWebSocketTask?
// @Published var messages: [String] = [] // @Published var messages: [String] = []
private var timer: Timer? private var timer: Timer?
fileprivate var _url: String
@Published var status: String = "status" @Published var status: String = "status"
init(urlString: String) { init(urlString: String) {
setupWebSocket(urlString: urlString) self._url = urlString
_setupWebSocket()
} }
deinit { deinit {
disconnect() disconnect()
} }
private func setupWebSocket(urlString: String) { private func _setupWebSocket() {
// guard let url = URL(string: "ws://127.0.0.1:8000/ws/user/test/") else { // guard let url = URL(string: "ws://127.0.0.1:8000/ws/user/test/") else {
guard let url = URL(string: urlString) else { guard let url = URL(string: self._url) else {
print("Invalid URL") print("Invalid URL")
return return
} }
@ -39,6 +41,7 @@ class WebSocketManager: ObservableObject {
receiveMessage() receiveMessage()
// Setup a ping timer to keep the connection alive // Setup a ping timer to keep the connection alive
self.timer?.invalidate()
timer = Timer.scheduledTimer(withTimeInterval: 10, repeats: true) { _ in timer = Timer.scheduledTimer(withTimeInterval: 10, repeats: true) { _ in
self.ping() self.ping()
} }
@ -51,7 +54,7 @@ class WebSocketManager: ObservableObject {
self.changeStatus(error.localizedDescription) self.changeStatus(error.localizedDescription)
print("Error in receiving message: \(error)") print("Error in receiving message: \(error)")
self.webSocketTask?.resume() self._setupWebSocket()
case .success(let message): case .success(let message):
switch message { switch message {
case .string(let text): case .string(let text):
@ -99,6 +102,7 @@ class WebSocketManager: ObservableObject {
if let error = error { if let error = error {
print("Error in sending ping: \(error)") print("Error in sending ping: \(error)")
self.changeStatus("ping failed: \(error.localizedDescription)") self.changeStatus("ping failed: \(error.localizedDescription)")
self._setupWebSocket()
} }
} }
} }

Loading…
Cancel
Save