private void startGameSession() {
		while (gameState.round < default_rounds + 1) {
			synchronized (sync_object) {	//game started
				sync_object.startGame = true;
				sync_object.notifyAll();
				System.out.println("server:-----Unblocked startGame-----");
			}
			sync_object.question_id = gameState.generateQuestionID();
			sync_object.correct_answer = answersMap.get(sync_object.question_id);
			System.out.println("Question is ready");
			synchronized (sync_object) {	//all clients wait for the question
				sync_object.askQuestion = true;
				sync_object.notifyAll();
				System.out.println("server:----Unblocked askQuestion-----");
			}
			synchronized (sync_object) {
				if (!sync_object.namesWritten) {
					try {
						sync_object.wait();
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
			}
			synchronized (sync_object) {
				if (!sync_object.allAnswered) {
					try {
						sync_object.wait();
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
			}
			synchronized (sync_object) {	//stop until all clients give their answer
				if (!sync_object.allFinallyAnswered) {
					try {
						sync_object.wait();
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
			}
			gameState.checkUpdateScore(sync_object.correct_answer);
			synchronized (sync_object) {
				sync_object.scoreCheckedUpdated = true;
				sync_object.notifyAll();
				System.out.println("server:----Unblocked scoreCheckedUpdated----");
			}
			synchronized (sync_object) {
				if (!sync_object.newRound) {
					try {
						sync_object.wait();
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
			}
			gameState.cleanState();
			synchronized (sync_object) {
				gameState.round = gameState.round + 1;	//step
				sync_object.clean();
				sync_object.updateRound = true;
				sync_object.notifyAll();
				System.out.println("server:----Unblocked updateRound----");
			}
		}
	}