001package runwar;
002
003import java.io.OutputStream;
004import java.net.InetAddress;
005import java.net.Socket;
006
007import runwar.options.CommandLineHandler;
008import runwar.options.ServerOptions;
009
010public class Stop {
011
012    public static void main(String[] args) throws Exception {
013        stopServer(args, true);
014    }
015
016    public static void stopServer(String[] args, boolean andExit) throws Exception {
017        ServerOptions serverOptions = CommandLineHandler.parseArguments(args);
018        int socketNumber = serverOptions.getSocketNumber();
019        String host = serverOptions.getHost();
020        char[] stoppassword = serverOptions.getStopPassword();
021        try {
022            InetAddress addr = InetAddress.getByName(host);
023            Socket s = new Socket(addr, socketNumber);
024            OutputStream out = s.getOutputStream();
025            System.out.println("*** sending stop request to socket : " + socketNumber);
026            for (int i = 0; i < stoppassword.length; i++) {
027                out.write(stoppassword[i]);
028            }
029            out.flush();
030            out.close();
031            s.close();
032            if (!Server.serverWentDown(10000, 500, addr, socketNumber)) {
033                System.err
034                        .println("Timeout stopping server.  Did you set a stop-password, and are you passing it?  Check the log for more information.");
035                System.exit(1);
036            }
037        } catch (Exception e) {
038            System.err
039                    .println("Could not stop server.  Are you sure it is running, and listing for stop requests on port "
040                            + socketNumber + "?");
041            System.exit(1);
042        }
043        System.out.println("*** stopped.");
044        System.out.println(Server.bar);
045        if (andExit) {
046            System.exit(0);
047        }
048        Thread.currentThread().interrupt();
049        return;
050    }
051
052}