package dgm.streaming.talker;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public abstract class Talker<T> implements Runnable
{
final private static Logger log = LoggerFactory.getLogger(Talker.class);
private SomeOne<T> someOne;
boolean active = false;
Thread t;
public Talker(SomeOne<T> someOne)
{
this.someOne = someOne;
}
public final void start()
{
log.info("Starting the thread");
t = new Thread(this);
active = true;
t.start();
}
public final void stop() {
log.info("Stopping the thread");
active = false;
}
@Override
public final void run()
{
while (active)
{
T next = nextMessage();
if (next == null)
{
log.info("no more messages");
someOne.done();
stop();
break;
}
someOne.talk(next);
try
{
Thread.sleep(1000);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
}
protected abstract T nextMessage();
}