package rmblworx.tools.timey;
import rmblworx.tools.timey.vo.TimeDescriptor;
/*
* Copyright 2014-2015 Christian Raue
* MIT License http://opensource.org/licenses/mit-license.php
*/
/**
* Diese Thread-sichere Implementierung dient der Zeitmessung in Millisekunden.
*
* @author mmatthies
*/
class TimerRunnable extends TimeyTimeRunnable implements Runnable {
/**
* Merker. Gibt an ob der Time-Modus aktiv ist.
*/
private boolean isTimeModeActive = false;
/**
* @param descriptor
* Referenz auf das Wertobjekt das die Zeit in
* Millisekunden an die konsumierende Implementierung
* liefern soll.
* @param passedTime
* Vergangene Zeit in Millisekunden.
*/
public TimerRunnable(final TimeDescriptor descriptor, final long passedTime) {
super(descriptor, passedTime, System.currentTimeMillis());
}
/**
* Berechnet die Stoppzeit und schreibt den Wert in Millisekunden in das
* Wertobjekt.
*/
@Override
protected void computeTime() {
this.timeDelta = 0;
final long currentTimeMillis = System.currentTimeMillis();
this.timeDelta = currentTimeMillis - this.timeStarted;
if (!this.isTimeModeActive) {
this.timeDescriptor.setMilliSeconds(this.timePassed + this.timeDelta);
}
}
@Override
public void run() {
this.lock.lock();
try {
this.computeTime();
} finally {
this.lock.unlock();
}
}
/**
* Schaltet den Time-Mode hin und her.
*
* @return true wenn erfolgreich, sonst false
*/
public Boolean toggleTimeMode() {
this.isTimeModeActive = !this.isTimeModeActive;
return this.isTimeModeActive;
}
}