public synchronized boolean preTurn() {

		if (!isStarted) {
			return false;
		}

		int currentTurn = turnSequence % turnInfo.length;
		if (turnInfo[currentTurn].isDone
				|| playerCommands.isAllDone(turnSequence)) {
			turnInfo[currentTurn].isDone = true;

			if (!turnInfo[currentTurn].isCommandsPopped) {
				turnInfo[currentTurn].isCommandsPopped = true;

				for (int i = 0; i < numPlayers; i++) {
					List<Object> commands = playerCommands
							.popPlayerCommands(i, turnSequence);
					if (commands != null) {
						for (Object command : commands) {
							snatchClient.handleMessage(i, command);
						}
					}
				}
			}
			stalled = 0; //reset stall count
			return true;
		} else {
			//this happens if the server is not responding. If the server is gone, eventually the game will end.
			stalled++;
			if(stalled == 25) {
				snatchClient.handleMessage(0,new ChatMessage("Server Not Responding..."));
			}
			//give it a small amount of time to recover, but it probably won't
			if(stalled > 180) {
				//dead game
				snatchClient.sendMessage(new EndGameMessage());
				snatchClient.handleMessage(0,new EndGameMessage());
			}
		
		}
		return false;
	}