Skip to content
Snippets Groups Projects

Add MessengerStop function wrapper

Merged Dariusz Rybicki requested to merge feature/messenger-stop into development
3 files
+ 186
0
Compare changes
  • Side-by-side
  • Inline
Files
3
import Foundation
import XCTestDynamicOverlay
import XXClient
public struct MessengerStop {
public struct Wait: Equatable {
public init(
sleepInterval: TimeInterval = 1,
retries: Int = 10
) {
self.sleepInterval = sleepInterval
self.retries = retries
}
public var sleepInterval: TimeInterval
public var retries: Int
}
public enum Error: Swift.Error {
case notLoaded
case timedOut
}
public var run: (Wait?) throws -> Void
public func callAsFunction(wait: Wait? = nil) throws -> Void {
try run(wait)
}
}
extension MessengerStop {
public static func live(_ env: MessengerEnvironment) -> MessengerStop {
MessengerStop { wait in
guard let cMix = env.cMix() else {
throw Error.notLoaded
}
guard cMix.networkFollowerStatus() == .running else {
return
}
try cMix.stopNetworkFollower()
guard let wait else { return }
var retries = wait.retries
var hasRunningProcesses = cMix.hasRunningProcesses()
while retries > 0 && hasRunningProcesses {
env.sleep(wait.sleepInterval)
hasRunningProcesses = cMix.hasRunningProcesses()
retries -= 1
}
if hasRunningProcesses {
throw Error.timedOut
}
}
}
}
extension MessengerStop {
public static let unimplemented = MessengerStop(
run: XCTUnimplemented("\(Self.self)")
)
}
Loading