package Communication.Messages.Service;
public abstract class MessageService
{
private Receiver receiver;
private Sender sender;
protected MessageService()
{
}
protected abstract Receiver startReceiver();
protected abstract Sender startSender();
public final Receiver getReceiver()
{
return this.receiver;
}
public final Sender getSender()
{
return this.sender;
}
public final void start()
{
this.receiver = this.startReceiver();
if (this.receiver != null && this.receiver.getState() == Thread.State.NEW)
{
this.receiver.start();
}
this.sender = this.startSender();
if (this.sender != null && this.sender.getState() == Thread.State.NEW)
{
this.sender.start();
}
}
public final void kill()
{
if (this.receiver != null && this.receiver.isAlive())
{
this.receiver.interrupt();
}
if (this.sender != null && this.sender.isAlive())
{
this.sender.interrupt();
}
}
public boolean isAlive()
{
return (this.receiver != null && this.receiver.isAlive()) || (this.sender != null && this.sender.isAlive());
}
public void join() throws InterruptedException
{
if (this.receiver != null && this.receiver.isAlive())
{
this.receiver.join();
}
if (this.sender != null && this.sender.isAlive())
{
this.sender.join();
}
}
@Override
protected void finalize() throws Throwable
{
this.kill();
super.finalize();
}
}