From 535cadd04d4178effc1575e8dc34c05681b3e2b8 Mon Sep 17 00:00:00 2001 From: Dariusz Rybicki <dariusz@elixxir.io> Date: Thu, 21 Jul 2022 20:13:01 +0100 Subject: [PATCH] Add health callback wrapper --- .../{Legacy => }/Cancellable.swift | 0 Sources/ElixxirDAppsSDK/Cmix.swift | 7 +++- .../CmixAddHealthCallback.swift | 29 +++++++++++++ Sources/ElixxirDAppsSDK/HealthCallback.swift | 34 +++++++++++++++ .../Legacy/NetworkHealthListener.swift | 42 ------------------- 5 files changed, 68 insertions(+), 44 deletions(-) rename Sources/ElixxirDAppsSDK/{Legacy => }/Cancellable.swift (100%) create mode 100644 Sources/ElixxirDAppsSDK/CmixAddHealthCallback.swift create mode 100644 Sources/ElixxirDAppsSDK/HealthCallback.swift delete mode 100644 Sources/ElixxirDAppsSDK/Legacy/NetworkHealthListener.swift 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 5760d32f..327e630c 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 00000000..1326c857 --- /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 00000000..c1365214 --- /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 22473583..00000000 --- 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 -- GitLab