|
|
|
|
@ -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() |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|