Skip to content
Snippets Groups Projects

XXMessengerClient

Merged Dariusz Rybicki requested to merge feature/messenger-client into development
4 files
+ 173
2
Compare changes
  • Side-by-side
  • Inline
Files
4
 
import XXClient
 
import XCTestDynamicOverlay
 
 
public struct MessengerWaitForNodes {
 
public typealias Progress = (Double) -> Void
 
 
public enum Error: Swift.Error {
 
case notLoaded
 
case timeout
 
}
 
 
public var run: (Double, Int, Int, @escaping Progress) throws -> Void
 
 
public func callAsFunction(
 
targetRatio: Double = 0.8,
 
sleepMS: Int = 1_000,
 
retries: Int = 10,
 
onProgress: @escaping Progress = { _ in }
 
) throws {
 
try run(targetRatio, sleepMS, retries, onProgress)
 
}
 
}
 
 
extension MessengerWaitForNodes {
 
public static func live(_ env: MessengerEnvironment) -> MessengerWaitForNodes {
 
MessengerWaitForNodes { targetRatio, sleepMS, retries, onProgress in
 
guard let cMix = env.ctx.getCMix() else {
 
throw Error.notLoaded
 
}
 
 
func getProgress(_ report: NodeRegistrationReport) -> Double {
 
min(1, ((report.ratio / targetRatio) * 100).rounded() / 100)
 
}
 
 
var report = try cMix.getNodeRegistrationStatus()
 
var retries = retries
 
onProgress(getProgress(report))
 
 
while report.ratio < targetRatio && retries > 0 {
 
env.sleep(sleepMS)
 
retries -= 1
 
report = try cMix.getNodeRegistrationStatus()
 
onProgress(getProgress(report))
 
}
 
 
if report.ratio < targetRatio {
 
throw Error.timeout
 
}
 
}
 
}
 
}
 
 
extension MessengerWaitForNodes {
 
public static let unimplemented = MessengerWaitForNodes(
 
run: XCTUnimplemented("\(Self.self)")
 
)
 
}
Loading