package VASSAL.chat.peer2peer; import java.io.IOException; import java.net.ServerSocket; import org.litesoft.p2pchat.PendingPeerManager; /** * Date: Mar 11, 2003 */ public class AcceptPeerThread extends Thread { private boolean running = true; private ServerSocket socket; private PendingPeerManager ppm; private int port; private static final int MAX_ATTEMPTS = 10; public AcceptPeerThread(int initialPort, PendingPeerManager ppm) throws IOException { this.ppm = ppm; for (int i=0;i<MAX_ATTEMPTS;++i) { port = initialPort+i; try { socket = new ServerSocket(port); break; } // FIXME: review error message catch (Exception ex) { if (i == MAX_ATTEMPTS -1) { // FIXME: switch to IOException(Throwable) ctor in Java 1.6 throw (IOException) new IOException().initCause(ex); } } } } public int getPort() { return port; } public AcceptPeerThread(ServerSocket socket, PendingPeerManager ppm) { this.socket = socket; this.ppm = ppm; } public synchronized void start() { running = true; super.start(); } public void run() { while (running) { try { ppm.addNewPeer(socket.accept()); } // FIXME: review error message catch (Exception ex) { halt(); } } } public void halt() { interrupt(); running = false; try { socket.close(); } // FIXME: review error message catch (IOException e) { e.printStackTrace(); } } }