Adjustable delays and stress testing through replay.

This commit is contained in:
Hedden, Kyle Matthew 2024-07-16 21:11:38 -04:00
parent 712fdf2e74
commit b59683b9f9
2 changed files with 42 additions and 9 deletions

View File

@ -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)

View File

@ -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()
}
}