Skip to content

Commit ed870ee

Browse files
committed
Publish messages and errors (Client)
1 parent b7f8568 commit ed870ee

File tree

1 file changed

+37
-4
lines changed

1 file changed

+37
-4
lines changed

Sources/ObservableWebSocketClient/Interface/ObservableWebSocketClient.swift

Lines changed: 37 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,23 +5,30 @@
55
// Created by Fernando Fernandes on 28.02.24.
66
//
77

8+
import Combine
89
import Foundation
910

1011
/// Establishes a WebSocket connection using the given `websocketURL`.
1112
/// Publishes received messages and errors.
12-
@Observable public final class ObservableWebSocketClient: Identifiable, Codable, Equatable {
13+
public final class ObservableWebSocketClient: Identifiable, Equatable, Codable, ObservableObject {
1314

1415
/// Publishes received messages after the connection is successfully established.
15-
public var message: CodableWebSocketMessage?
16+
@Published public var codableMessage: CodableWebSocketMessage? = nil
1617

1718
/// Publishes any error that may occur.
18-
public var error: ObservableWebSocketClientError?
19+
@Published public var error: ObservableWebSocketClientError? = nil
20+
21+
#warning("TODO: isConnected logic")
22+
/// Publishes whether the WebSocket is still valid/alive.
23+
@Published public var isConnected: Bool = false
1924

2025
public var id: UUID
2126

2227
public let websocketURL: URL
2328

2429
private let service: ObservableWebSocketService
30+
31+
private var cancellables = Set<AnyCancellable>()
2532

2633
/// Creates an `ObservableWebSocketClient` instance.
2734
///
@@ -40,8 +47,34 @@ import Foundation
4047
error: ObservableWebSocketClientError? = nil) {
4148
self.id = id
4249
self.websocketURL = websocketURL
43-
self.message = message
50+
self.codableMessage = message
4451
self.error = error
4552
self.service = ObservableWebSocketService(url: websocketURL)
53+
observeWebSocketConnection()
54+
}
55+
}
56+
57+
// MARK: - Observation
58+
59+
extension ObservableWebSocketClient {
60+
func observeWebSocketConnection() {
61+
62+
// MARK: Message
63+
64+
service.$message.sink { [weak self] message in
65+
if let message {
66+
self?.codableMessage = CodableWebSocketMessage(message: message)
67+
}
68+
}
69+
.store(in: &cancellables)
70+
71+
// MARK: Error
72+
73+
service.$error.sink { [weak self] error in
74+
if let error {
75+
self?.error = error
76+
}
77+
}
78+
.store(in: &cancellables)
4679
}
4780
}

0 commit comments

Comments
 (0)