package org.atomhopper.server; import org.eclipse.jetty.server.Server; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.InetAddress; import java.net.ServerSocket; import java.net.Socket; public class MonitorThread extends Thread { private static final Logger LOG = LoggerFactory.getLogger(AtomHopperServer.class); private ServerSocket socket; private final Server serverInstance; private static final String MONITOR_NAME = "StopMonitor"; public MonitorThread(Server serverInstance, final int stopPort, final String ipAddress) { this.serverInstance = serverInstance; setDaemon(true); setName(MONITOR_NAME); try { socket = new ServerSocket(stopPort, 1, InetAddress.getByName(ipAddress)); } catch (Exception e) { LOG.error("Fatal error while monitoring or trying to stop: " + e.getMessage(), e); } } @Override public void run() { Socket accept; try { accept = socket.accept(); BufferedReader reader = new BufferedReader(new InputStreamReader(accept.getInputStream())); reader.readLine(); LOG.info("Stopping Atom Hopper..."); serverInstance.stop(); LOG.info("Atom Hopper has been stopped"); accept.close(); socket.close(); } catch (Exception e) { LOG.error("Fatal error while monitoring or trying to stop: " + e.getMessage(), e); } } }