/* * * Copyright (c) 2000-2007 by Rodney Kinney * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License (LGPL) as published by the Free Software Foundation. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, copies are available * at http://www.opensource.org. */ package VASSAL.chat.node; import java.io.IOException; import java.net.Socket; /** * Watches for thread lock on a server. Kills the runtime if unable to establish new connection * Copyright (c) 2003 by Rodney Kinney. All rights reserved. * Date: Jul 20, 2003 */ public class LockWatcher extends Thread { private long delay; private long timeout; private int port; /** * * @param delay Time in milliseconds between connection attempts * @param timeout Wait time in milliseconds to establish a new connection before terminating */ public LockWatcher(long delay, long timeout, int port) { this.delay = delay; this.timeout = timeout; this.port = port; } public void run() { while (true) { try { sleep(delay); pingServer(); } catch (InterruptedException e) { break; } } } private void pingServer() { try { final Socket s = new Socket("localhost", port); //$NON-NLS-1$ final Thread t = new Thread(new Timeout()); SocketWatcher watcher = new SocketWatcher() { public void handleMessage(String msg) { t.interrupt(); } public void socketClosed(SocketHandler handler) { System.err.println("Server closed socket"); //$NON-NLS-1$ } }; SocketHandler sender = new BufferedSocketHandler(s, watcher); sender.start(); t.start(); sender.writeLine(Protocol.encodeRegisterCommand("pinger", "ping/Main", "")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ try { t.join(); } catch (InterruptedException e) { } sender.close(); } // FIXME: review error message catch (IOException e) { e.printStackTrace(); } } private class Timeout implements Runnable { public void run() { try { sleep(timeout); System.err.println("No response from server in "+(timeout/1000.0)+" seconds. Terminating process"); //$NON-NLS-1$ //$NON-NLS-2$ System.exit(0); } // FIXME: review error message catch (InterruptedException e) { System.err.println("Ping"); //$NON-NLS-1$ // Interrupt means response received from server } } } }