package mountainrangepvp.net.lanping; import mountainrangepvp.engine.Log; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; /** * @author lachlan */ public class PingServer { private final Log log; private DatagramSocket socket; private DatagramPacket packet; private Thread pingThread; public PingServer(Log log) { this.log = log; } public void start() throws IOException { socket = new DatagramSocket(); packet = makePacket(); pingThread = new Thread(new Runnable() { @Override public void run() { try { while (!Thread.currentThread().isInterrupted()) { ping(); Thread.sleep(1000 / PingConstants.PING_RATE); } } catch (InterruptedException ex) { // shut down } } }, "Ping Server"); pingThread.setDaemon(true); pingThread.start(); } public void stop() { pingThread.interrupt(); socket.close(); } private DatagramPacket makePacket() { byte[] data = PingConstants.PING_DATA; return new DatagramPacket(data, data.length, PingConstants.MULTICAST_ADDRESS, PingConstants.MULTICAST_PORT); } private void ping() { try { socket.send(packet); } catch (IOException ioe) { log.warn("Could not send ping", ioe); Thread.currentThread().interrupt(); } } }