@Override public void run() { List<Socket> inProgress = new ArrayList<>(); ServerSocketFactory factory = ServerSocketFactory.getDefault(); try { ss = factory.createServerSocket(0); ss.setSoTimeout(5000); socketReadyLatch.countDown(); while (!interrupted()) { inProgress.add(ss.accept()); // eat socket } } catch (java.net.SocketTimeoutException expected) { } catch (Exception e) { e.printStackTrace(); } finally { try { ss.close(); } catch (IOException ignored) { } for (Socket s : inProgress) { try { s.close(); } catch (IOException ignored) { } } } }
/** * Begins the thread that waits for new clients. If the server is already in listening mode, this * call has no effect. * * @exception IOException if an I/O error occurs when creating the server socket. */ public final void listen() throws IOException { if (!isListening()) { if (serverSocket == null) { serverSocket = new ServerSocket(getPort(), backlog); } serverSocket.setSoTimeout(timeout); connectionListener = new Thread(this); connectionListener.start(); } }
public void buttonPressed(Button button) { if (button.getId() == TitleMenu.RESTART_GAME_ID) { clearMenus(); TitleMenu menu = new TitleMenu(GAME_WIDTH, GAME_HEIGHT); addMenu(menu); } else if (button.getId() == TitleMenu.START_GAME_ID) { clearMenus(); isMultiplayer = false; localId = 0; synchronizer = new TurnSynchronizer(this, null, 0, 1); synchronizer.setStarted(true); createLevel(TitleMenu.level); } else if (button.getId() == TitleMenu.SELECT_LEVEL_ID) { addMenu(new LevelSelect(false)); } else if (button.getId() == TitleMenu.SELECT_HOST_LEVEL_ID) { addMenu(new LevelSelect(true)); } else if (button.getId() == TitleMenu.HOST_GAME_ID) { addMenu(new HostingWaitMenu()); isMultiplayer = true; isServer = true; try { if (isServer) { localId = 0; serverSocket = new ServerSocket(3000); serverSocket.setSoTimeout(1000); hostThread = new Thread() { public void run() { boolean fail = true; try { while (!isInterrupted()) { Socket socket = null; try { socket = serverSocket.accept(); } catch (SocketTimeoutException e) { } if (socket == null) { System.out.println("asdf"); continue; } fail = false; packetLink = new NetworkPacketLink(socket); createServerState = 1; break; } } catch (Exception e) { e.printStackTrace(); } if (fail) { try { serverSocket.close(); } catch (IOException e) { } } }; }; hostThread.start(); } } catch (Exception e) { e.printStackTrace(); } } else if (button.getId() == TitleMenu.JOIN_GAME_ID) { addMenu(new JoinGameMenu()); } else if (button.getId() == TitleMenu.CANCEL_JOIN_ID) { popMenu(); if (hostThread != null) { hostThread.interrupt(); hostThread = null; } } else if (button.getId() == TitleMenu.PERFORM_JOIN_ID) { menuStack.clear(); isMultiplayer = true; isServer = false; try { localId = 1; packetLink = new ClientSidePacketLink(TitleMenu.ip, 3000); synchronizer = new TurnSynchronizer(this, packetLink, localId, 2); packetLink.setPacketListener(this); } catch (Exception e) { e.printStackTrace(); // System.exit(1); addMenu(new TitleMenu(GAME_WIDTH, GAME_HEIGHT)); } } else if (button.getId() == TitleMenu.SELECT_DIFFICULTY_ID) { addMenu(new DifficultySelect()); } else if (button.getId() == TitleMenu.EXIT_GAME_ID) { System.exit(0); } }