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() {
|
@objc func update() {
|
||||||
Task { @MainActor in
|
Task { @MainActor in
|
||||||
let moleculeReplacementVC = MoleculeReplacementViewController()
|
let moleculeReplacementVC = MoleculeReplacementViewController()
|
||||||
moleculeReplacementVC.replaceCallback = { serverResponse, loadObject in
|
moleculeReplacementVC.replaceCallback = { [weak self] serverResponse, loadObject, delay, replay in
|
||||||
Task {
|
Task {
|
||||||
await NavigationHandler.shared().popTopViewController()
|
await NavigationHandler.shared().popTopViewController()
|
||||||
try? await Task.sleep(nanoseconds: 4000000)
|
repeat {
|
||||||
await MVMCoreLoadRequestOperation.processJSON(fromServer: serverResponse, loadObject: loadObject)
|
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)
|
await NavigationHandler.shared().push(viewController: moleculeReplacementVC)
|
||||||
|
|||||||
@ -12,8 +12,11 @@ import MVMCoreUI
|
|||||||
class MoleculeReplacementViewController: UIViewController {
|
class MoleculeReplacementViewController: UIViewController {
|
||||||
let textView = UITextView(frame: .zero)
|
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() {
|
override func viewDidLoad() {
|
||||||
super.viewDidLoad()
|
super.viewDidLoad()
|
||||||
// Do any additional setup after loading the view.
|
// 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))
|
let buildButton = UIBarButtonItem(barButtonSystemItem: .play, target: self, action: #selector(play))
|
||||||
navigationItem.setRightBarButtonItems([clearButton, buildButton], animated: true)
|
navigationItem.setRightBarButtonItems([clearButton, buildButton], animated: true)
|
||||||
navigationItem.title = "Trigger Update"
|
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) {
|
func showError(_ error: NSError) {
|
||||||
@ -84,17 +97,35 @@ class MoleculeReplacementViewController: UIViewController {
|
|||||||
|
|
||||||
let loadObject = MVMCoreLoadObject(pageJSON: nil, modulesJSON: modulesJSON, requestParameters: nil, dataForPage: nil, delegateObject: nil)!
|
let loadObject = MVMCoreLoadObject(pageJSON: nil, modulesJSON: modulesJSON, requestParameters: nil, dataForPage: nil, delegateObject: nil)!
|
||||||
|
|
||||||
replaceCallback?(rawServerResponse, loadObject)
|
replaceCallback?(rawServerResponse, loadObject, applicationDelay, replay)
|
||||||
}
|
}
|
||||||
} catch {
|
} catch {
|
||||||
showError(error as NSError)
|
showError(error as NSError)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@objc func close() {
|
@objc func delay() {
|
||||||
Task { @MainActor in
|
let alert = UIAlertController(title: "Delay", message: "Set delay", preferredStyle: .alert)
|
||||||
await NavigationHandler.shared().popTopViewController()
|
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