Adjustable delays and stress testing through replay.
This commit is contained in:
parent
712fdf2e74
commit
b59683b9f9
@ -129,11 +129,13 @@ class DetailViewController: UIViewController {
|
||||
@objc func update() {
|
||||
Task { @MainActor in
|
||||
let moleculeReplacementVC = MoleculeReplacementViewController()
|
||||
moleculeReplacementVC.replaceCallback = { serverResponse, loadObject in
|
||||
moleculeReplacementVC.replaceCallback = { [weak self] serverResponse, loadObject, delay, replay in
|
||||
Task {
|
||||
await NavigationHandler.shared().popTopViewController()
|
||||
try? await Task.sleep(nanoseconds: 4000000)
|
||||
await MVMCoreLoadRequestOperation.processJSON(fromServer: serverResponse, loadObject: loadObject)
|
||||
repeat {
|
||||
try? await Task.sleep(nanoseconds: UInt64(delay * 1_000_000_000))
|
||||
await MVMCoreLoadRequestOperation.processJSON(fromServer: serverResponse, loadObject: loadObject)
|
||||
} while(replay && self != nil)
|
||||
}
|
||||
}
|
||||
await NavigationHandler.shared().push(viewController: moleculeReplacementVC)
|
||||
|
||||
@ -12,8 +12,11 @@ import MVMCoreUI
|
||||
class MoleculeReplacementViewController: UIViewController {
|
||||
let textView = UITextView(frame: .zero)
|
||||
|
||||
var replaceCallback: (([AnyHashable : Any], MVMCoreLoadObject)->Void)?
|
||||
|
||||
var replaceCallback: (([AnyHashable : Any], MVMCoreLoadObject, _ delay: TimeInterval, _ replay: Bool)->Void)?
|
||||
|
||||
var applicationDelay = 3.0
|
||||
var replay = false
|
||||
|
||||
override func viewDidLoad() {
|
||||
super.viewDidLoad()
|
||||
// Do any additional setup after loading the view.
|
||||
@ -61,6 +64,16 @@ class MoleculeReplacementViewController: UIViewController {
|
||||
let buildButton = UIBarButtonItem(barButtonSystemItem: .play, target: self, action: #selector(play))
|
||||
navigationItem.setRightBarButtonItems([clearButton, buildButton], animated: true)
|
||||
navigationItem.title = "Trigger Update"
|
||||
resetToolbarItems()
|
||||
}
|
||||
|
||||
func resetToolbarItems() {
|
||||
if #available(iOS 16.0, *) {
|
||||
let spacer = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: self, action: nil)
|
||||
let delayButton = UIBarButtonItem(title: "\(applicationDelay)s", image: nil, target: self, action: #selector(delay))
|
||||
let replayButton = UIBarButtonItem(barButtonSystemItem: replay ? .refresh : .compose, target: self, action: #selector(toggleReplay))
|
||||
setToolbarItems([spacer, delayButton, replayButton], animated: true)
|
||||
}
|
||||
}
|
||||
|
||||
func showError(_ error: NSError) {
|
||||
@ -84,17 +97,35 @@ class MoleculeReplacementViewController: UIViewController {
|
||||
|
||||
let loadObject = MVMCoreLoadObject(pageJSON: nil, modulesJSON: modulesJSON, requestParameters: nil, dataForPage: nil, delegateObject: nil)!
|
||||
|
||||
replaceCallback?(rawServerResponse, loadObject)
|
||||
replaceCallback?(rawServerResponse, loadObject, applicationDelay, replay)
|
||||
}
|
||||
} catch {
|
||||
showError(error as NSError)
|
||||
}
|
||||
}
|
||||
|
||||
@objc func close() {
|
||||
Task { @MainActor in
|
||||
await NavigationHandler.shared().popTopViewController()
|
||||
@objc func delay() {
|
||||
let alert = UIAlertController(title: "Delay", message: "Set delay", preferredStyle: .alert)
|
||||
alert.addTextField { textField in
|
||||
textField.text = "\(self.applicationDelay)"
|
||||
textField.placeholder = "Delay in seconds"
|
||||
}
|
||||
let action = UIAlertAction(title: "Confirm", style: .default) { [weak self] action in
|
||||
guard let self = self,
|
||||
let input = alert.textFields?.first?.text,
|
||||
let value = Double(input) else {
|
||||
return
|
||||
}
|
||||
self.applicationDelay = value
|
||||
self.resetToolbarItems()
|
||||
}
|
||||
alert.addAction(action)
|
||||
present(alert, animated: true)
|
||||
}
|
||||
|
||||
@objc func toggleReplay() {
|
||||
replay = !replay
|
||||
resetToolbarItems()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user