ExTimer(callback: Callback, timerCalc: (Int) -> Int)
Exponential backoff timer
Example from tests:
val waiter = Waiter()
var counter = 0
val timer = ExTimer({
counter++
waiter.resume()
}, { tries ->
tries * 1000
})
// This is for the example, if you call
// scheduleTimeout() in a row, the last call "wins"
// This example will call the callback only once after
// 4 seconds then once again after 1 second
timer.scheduleTimeout() // fires after 1000
timer.scheduleTimeout() // fires after 2000
timer.scheduleTimeout() // fires after 3000
timer.reset()
timer.scheduleTimeout() // fires after 1000
timer.scheduleTimeout() // fires after 2000
timer.scheduleTimeout() // fires after 3000
timer.scheduleTimeout() // fires after 4000
waiter.await(5000, 1)
waiter.assertEquals(1, counter)
timer.reset()
timer.scheduleTimeout() // fires after 1000
waiter.await(2000, 1)
waiter.assertEquals(2, counter)