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

Loading…
Cancel
Save