diff --git a/CHANGELOG.md b/CHANGELOG.md index 762cd24..9ffa37c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Change Log +## 13.3.0 + +* Add `onOpen`, `onClose` and `onError` callbacks to `Realtime` service + ## 13.2.2 * Fix issue: Missing AppwriteEnums dependency causing build failure diff --git a/README.md b/README.md index 3947995..5310269 100644 --- a/README.md +++ b/README.md @@ -31,7 +31,7 @@ Add the package to your `Package.swift` dependencies: ```swift dependencies: [ - .package(url: "git@github.com:appwrite/sdk-for-apple.git", from: "13.2.2"), + .package(url: "git@github.com:appwrite/sdk-for-apple.git", from: "13.3.0"), ], ``` diff --git a/Sources/Appwrite/Client.swift b/Sources/Appwrite/Client.swift index ff48ed9..7e8fc3c 100644 --- a/Sources/Appwrite/Client.swift +++ b/Sources/Appwrite/Client.swift @@ -23,7 +23,7 @@ open class Client { "x-sdk-name": "Apple", "x-sdk-platform": "client", "x-sdk-language": "apple", - "x-sdk-version": "13.2.2", + "x-sdk-version": "13.3.0", "x-appwrite-response-format": "1.8.0" ] diff --git a/Sources/Appwrite/Services/Realtime.swift b/Sources/Appwrite/Services/Realtime.swift index ecc4a05..88be6ad 100644 --- a/Sources/Appwrite/Services/Realtime.swift +++ b/Sources/Appwrite/Services/Realtime.swift @@ -22,6 +22,22 @@ open class Realtime : Service { private var reconnectAttempts = 0 private var subscriptionsCounter = 0 private var reconnect = true + + private var onErrorCallbacks: [((Swift.Error?, HTTPResponseStatus?) -> Void)] = [] + private var onCloseCallbacks: [(() -> Void)] = [] + private var onOpenCallbacks: [(() -> Void)] = [] + + public func onError(_ callback: @escaping (Swift.Error?, HTTPResponseStatus?) -> Void) { + self.onErrorCallbacks.append(callback) + } + + public func onClose(_ callback: @escaping () -> Void) { + self.onCloseCallbacks.append(callback) + } + + public func onOpen(_ callback: @escaping () -> Void) { + self.onOpenCallbacks.append(callback) + } private func startHeartbeat() { stopHeartbeat() @@ -191,6 +207,7 @@ extension Realtime: WebSocketClientDelegate { public func onOpen(channel: Channel) { self.reconnectAttempts = 0 + onOpenCallbacks.forEach { $0() } startHeartbeat() } @@ -210,6 +227,8 @@ extension Realtime: WebSocketClientDelegate { public func onClose(channel: Channel, data: Data) async throws { stopHeartbeat() + + onCloseCallbacks.forEach { $0() } if (!reconnect) { reconnect = true @@ -230,6 +249,8 @@ extension Realtime: WebSocketClientDelegate { public func onError(error: Swift.Error?, status: HTTPResponseStatus?) { stopHeartbeat() print(error?.localizedDescription ?? "Unknown error") + + onErrorCallbacks.forEach { $0(error, status) } } func handleResponseError(from json: [String: Any]) throws {