Skip to content

Commit 55f207d

Browse files
committed
Update to Swift 6.2
1 parent 13d43ac commit 55f207d

File tree

4 files changed

+44
-29
lines changed

4 files changed

+44
-29
lines changed

Package.swift

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// swift-tools-version: 5.10
1+
// swift-tools-version: 6.2
22

33
import PackageDescription
44

@@ -15,13 +15,19 @@ let package = Package(
1515
)
1616
],
1717
dependencies: [
18-
.package(url: "https://github.com/backslash-f/toolbox.git", from: "1.0.0")
18+
.package(
19+
url: "https://github.com/thatfactory/toolbox.git",
20+
from: "0.1.0"
21+
)
1922
],
2023
targets: [
2124
.target(
2225
name: "ObservableWebSocketClient",
2326
dependencies: [
24-
.product(name: "Toolbox", package: "toolbox")
27+
.product(
28+
name: "Toolbox",
29+
package: "toolbox"
30+
)
2531
]
2632
),
2733
.testTarget(

Sources/ObservableWebSocketClient/Interface/ObservableWebSocketClient+Messages.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ public extension ObservableWebSocketClient {
5858
/// ```
5959
/// {"id": "123e4567-e89b-12d3-a456-426614174000", "type": "ping"}
6060
/// ```
61-
func sendMessageWithGeneratedId(_ idInjector: ((String) -> String)) {
61+
func sendMessageWithGeneratedId(_ idInjector: (@Sendable (String) -> String)) {
6262
let uniqueId = UUID().uuidString
6363
let messageWithId = idInjector(uniqueId)
6464
service.send(message: messageWithId)

Sources/ObservableWebSocketClient/Interface/ObservableWebSocketClient.swift

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ public final class ObservableWebSocketClient: Identifiable, Equatable, Codable,
2929
private(set) var pingTimer: Timer?
3030
private let pingTimerInterval: TimeInterval?
3131
private let pingMessage: String?
32-
private let pingMessageWithGeneratedId: ((String) -> String)?
32+
private let pingMessageWithGeneratedId: (@Sendable (String) -> String)?
3333

3434
private(set) var service: ObservableWebSocketService
3535

@@ -78,7 +78,7 @@ public final class ObservableWebSocketClient: Identifiable, Equatable, Codable,
7878
codableError: CodableError? = nil,
7979
pingTimerInterval: TimeInterval? = nil,
8080
pingMessage: String? = nil,
81-
pingMessageWithGeneratedId: ((String) -> String)? = nil) {
81+
pingMessageWithGeneratedId: (@Sendable (String) -> String)? = nil) {
8282
self.id = id
8383
self.websocketURL = websocketURL
8484
self.codableMessage = message
@@ -101,15 +101,21 @@ public final class ObservableWebSocketClient: Identifiable, Equatable, Codable,
101101

102102
private extension ObservableWebSocketClient {
103103
func startPingTimer() {
104-
if let pingTimerInterval,
105-
pingMessage?.isEmpty == false || pingMessageWithGeneratedId != nil {
104+
guard let pingTimerInterval,
105+
pingMessage?.isEmpty == false || pingMessageWithGeneratedId != nil
106+
else { return }
107+
108+
let service = service
109+
if let pingMessage, !pingMessage.isEmpty {
110+
pingTimer = Timer.scheduledTimer(
111+
withTimeInterval: pingTimerInterval, repeats: true) { _ in
112+
service.send(message: pingMessage)
113+
}
114+
} else if let pingMessageWithGeneratedId {
106115
pingTimer = Timer.scheduledTimer(
107-
withTimeInterval: pingTimerInterval, repeats: true) { [weak self] _ in
108-
if let message = self?.pingMessage {
109-
self?.sendMessage(message)
110-
} else if let messageWithGeneratedId = self?.pingMessageWithGeneratedId {
111-
self?.sendMessageWithGeneratedId(messageWithGeneratedId)
112-
}
116+
withTimeInterval: pingTimerInterval, repeats: true) { _ in
117+
let messageWithId = pingMessageWithGeneratedId(UUID().uuidString)
118+
service.send(message: messageWithId)
113119
}
114120
}
115121
}

Sources/ObservableWebSocketClient/Network/ObservableWebSocketService.swift

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
import Foundation
99
import Toolbox
1010

11-
public final class ObservableWebSocketService: ObservableObject {
11+
public final class ObservableWebSocketService: ObservableObject, @unchecked Sendable {
1212

1313
@Published public var message: URLSessionWebSocketTask.Message?
1414

@@ -35,11 +35,11 @@ public extension ObservableWebSocketService {
3535

3636
func send(message: String) {
3737
let wsMessage = URLSessionWebSocketTask.Message.string(message)
38-
webSocketTask?.send(wsMessage) { error in
39-
if let error {
40-
Task { @MainActor in
41-
self.codableError = .init(error)
42-
}
38+
webSocketTask?.send(wsMessage) { [weak self] error in
39+
guard let self, let error else { return }
40+
41+
Task { @MainActor in
42+
self.codableError = .init(error)
4343
}
4444
}
4545
}
@@ -60,15 +60,18 @@ private extension ObservableWebSocketService {
6060
}
6161

6262
func receiveMessage() {
63-
webSocketTask?.receive { result in
64-
switch result {
65-
case .success(let message):
66-
self.message = message
67-
// Listen for the next message.
68-
self.receiveMessage()
69-
70-
case .failure(let error):
71-
self.codableError = .init(error)
63+
webSocketTask?.receive { [weak self] result in
64+
Task { @MainActor [weak self] in
65+
guard let self else { return }
66+
switch result {
67+
case .success(let message):
68+
self.message = message
69+
// Listen for the next message.
70+
self.receiveMessage()
71+
72+
case .failure(let error):
73+
self.codableError = .init(error)
74+
}
7275
}
7376
}
7477
}

0 commit comments

Comments
 (0)