private void startTimer(int timeout) {
stopTimer();
BA.Log("startTimer: creating");
timerDispose = Observable.zip(
Observable.range(0, timeout + 1),
Observable.interval(0, 1, TimeUnit.SECONDS),
(val, time) -> timeout - val)
.observeOn(Schedulers.io())
.doOnNext(val -> log.info("timer is {}", val))
.doOnNext(transactionTimeout::onNext)
.subscribe(transactionTimeout::onNext,
this::onTimeoutFailed,
this::onEcrTimeout);
}