/** Keeps server running until there are no players for longer than the set timeout */ public void run() { boolean keepRunning = true; while (keepRunning) { // check that game still has players if (getNumberOfPlayers() < 1) { Date initialTime = new Date(); while (getNumberOfPlayers() < 1) { Date currentTime = new Date(); Long timeDiff = currentTime.getTime() - initialTime.getTime(); if (GAME_TIMEOUT < timeDiff) { keepRunning = false; } } } else { boolean playersReady; // check if players are ready for question do { playersReady = true; try { for (GameServerWorker player : players) { if (!player.getReadyForQuestion()) { playersReady = false; } } } catch (ConcurrentModificationException e) { playersReady = false; } try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } while (!playersReady); handleNextQuestion(); } } // remove this game from the server gameServer.removeGameInstance(portNumber); }