package network;
import settings.Settings;
import network.message.Message;
import network.message.MessageFactory;
public class Pinger extends Thread
{
private Peer peer;
private boolean run;
private long ping;
public Pinger(Peer peer)
{
this.peer = peer;
this.run = true;
this.ping = Long.MAX_VALUE;
this.start();
}
public long getPing()
{
return this.ping;
}
public void run()
{
while(this.run)
{
//CREATE PING
Message pingMessage = MessageFactory.getInstance().createPingMessage();
//GET RESPONSE
long start = System.currentTimeMillis();
Message response = this.peer.getResponse(pingMessage);
//CHECK IF VALID PING
if(response == null || response.getType() != Message.PING_TYPE)
{
//PING FAILES
this.peer.onPingFail();
//STOP PINGER
this.run = false;
return;
}
//UPDATE PING
this.ping = System.currentTimeMillis() - start;
//SLEEP
try
{
Thread.sleep(Settings.getInstance().getPingInterval());
}
catch (InterruptedException e)
{
//FAILED TO SLEEP
}
}
}
public void stopPing()
{
try
{
this.run = false;
this.interrupt();
this.join();
}
catch(Exception e)
{
}
}
}