diff --git a/Sources/ElixxirDAppsSDK/Legacy/Cancellable.swift b/Sources/ElixxirDAppsSDK/Cancellable.swift similarity index 100% rename from Sources/ElixxirDAppsSDK/Legacy/Cancellable.swift rename to Sources/ElixxirDAppsSDK/Cancellable.swift diff --git a/Sources/ElixxirDAppsSDK/Cmix.swift b/Sources/ElixxirDAppsSDK/Cmix.swift index 5760d32f4db5b568c6cf84117ebc5cd86c57e1bc..327e630c19e387ad76a652bdaa0f65506479ae11 100644 --- a/Sources/ElixxirDAppsSDK/Cmix.swift +++ b/Sources/ElixxirDAppsSDK/Cmix.swift @@ -11,6 +11,7 @@ public struct Cmix { public var stopNetworkFollower: CmixStopNetworkFollower public var waitForNetwork: CmixWaitForNetwork public var registerClientErrorCallback: CmixRegisterClientErrorCallback + public var addHealthCallback: CmixAddHealthCallback } extension Cmix { @@ -25,7 +26,8 @@ extension Cmix { startNetworkFollower: .live(bindingsCmix), stopNetworkFollower: .live(bindingsCmix), waitForNetwork: .live(bindingsCmix), - registerClientErrorCallback: .live(bindingsCmix) + registerClientErrorCallback: .live(bindingsCmix), + addHealthCallback: .live(bindingsCmix) ) } } @@ -41,6 +43,7 @@ extension Cmix { startNetworkFollower: .unimplemented, stopNetworkFollower: .unimplemented, waitForNetwork: .unimplemented, - registerClientErrorCallback: .unimplemented + registerClientErrorCallback: .unimplemented, + addHealthCallback: .unimplemented ) } diff --git a/Sources/ElixxirDAppsSDK/CmixAddHealthCallback.swift b/Sources/ElixxirDAppsSDK/CmixAddHealthCallback.swift new file mode 100644 index 0000000000000000000000000000000000000000..1326c85700ced8ae5b34b48bf87e17c7d91f67c9 --- /dev/null +++ b/Sources/ElixxirDAppsSDK/CmixAddHealthCallback.swift @@ -0,0 +1,29 @@ +import Bindings +import XCTestDynamicOverlay + +public struct CmixAddHealthCallback { + public var run: (HealthCallback) -> Cancellable + + public func callAsFunction(_ callback: HealthCallback) -> Cancellable { + run(callback) + } +} + +extension CmixAddHealthCallback { + public static func live(_ bindingsCmix: BindingsCmix) -> CmixAddHealthCallback { + CmixAddHealthCallback { callback in + let id = bindingsCmix.add( + callback.makeBindingsHealthCallback() + ) + return Cancellable { + bindingsCmix.removeHealthCallback(id) + } + } + } +} + +extension CmixAddHealthCallback { + public static let unimplemented = CmixAddHealthCallback( + run: XCTUnimplemented("\(Self.self)") + ) +} diff --git a/Sources/ElixxirDAppsSDK/HealthCallback.swift b/Sources/ElixxirDAppsSDK/HealthCallback.swift new file mode 100644 index 0000000000000000000000000000000000000000..c136521446bb2bd86859f0e90df8eb8068bf5c92 --- /dev/null +++ b/Sources/ElixxirDAppsSDK/HealthCallback.swift @@ -0,0 +1,34 @@ +import Bindings +import XCTestDynamicOverlay + +public struct HealthCallback { + public init(handle: @escaping (Bool) -> Void) { + self.handle = handle + } + + public var handle: (Bool) -> Void +} + +extension HealthCallback { + public static let unimplemented = HealthCallback( + handle: XCTUnimplemented("\(Self.self)") + ) +} + +extension HealthCallback { + func makeBindingsHealthCallback() -> BindingsNetworkHealthCallbackProtocol { + class Callback: NSObject, BindingsNetworkHealthCallbackProtocol { + init(_ healthCallback: HealthCallback) { + self.healthCallback = healthCallback + } + + let healthCallback: HealthCallback + + func callback(_ p0: Bool) { + healthCallback.handle(p0) + } + } + + return Callback(self) + } +} diff --git a/Sources/ElixxirDAppsSDK/Legacy/NetworkHealthListener.swift b/Sources/ElixxirDAppsSDK/Legacy/NetworkHealthListener.swift deleted file mode 100644 index 22473583899cc343bda522d8b287324e5a30bc33..0000000000000000000000000000000000000000 --- a/Sources/ElixxirDAppsSDK/Legacy/NetworkHealthListener.swift +++ /dev/null @@ -1,42 +0,0 @@ -//import Bindings -// -//public struct NetworkHealthListener { -// public var listen: (@escaping (Bool) -> Void) -> Cancellable -// -// public func callAsFunction(callback: @escaping (Bool) -> Void) -> Cancellable { -// listen(callback) -// } -//} -// -//extension NetworkHealthListener { -// public static func live(bindingsClient: BindingsCmix) -> NetworkHealthListener { -// NetworkHealthListener { callback in -// let listener = Listener(onCallback: callback) -// let id = bindingsClient.registerNetworkHealthCB(listener) -// return Cancellable { -// bindingsClient.unregisterNetworkHealthCB(id) -// } -// } -// } -//} -// -//private final class Listener: NSObject, BindingsNetworkHealthCallbackProtocol { -// init(onCallback: @escaping (Bool) -> Void) { -// self.onCallback = onCallback -// super.init() -// } -// -// let onCallback: (Bool) -> Void -// -// func callback(_ p0: Bool) { -// onCallback(p0) -// } -//} -// -//#if DEBUG -//extension NetworkHealthListener { -// public static let failing = NetworkHealthListener { _ in -// fatalError("Not implemented") -// } -//} -//#endif