Fixed player leaving/conceding handling.

This commit is contained in:
LevelX2 2017-10-21 16:13:45 +02:00
parent 79d4c07d20
commit 58d3fc2328
21 changed files with 553 additions and 463 deletions

View file

@ -53,6 +53,7 @@ import mage.filter.common.FilterCreatureForCombat;
import mage.filter.common.FilterCreatureForCombatBlock;
import mage.filter.predicate.permanent.ControllerIdPredicate;
import mage.game.Game;
import mage.game.GameImpl;
import mage.game.combat.CombatGroup;
import mage.game.draft.Draft;
import mage.game.events.GameEvent;
@ -186,13 +187,25 @@ public class HumanPlayer extends PlayerImpl {
response.clear();
logger.debug("Waiting response from player: " + getId());
game.resumeTimer(getTurnControlledBy());
synchronized (response) {
try {
response.wait();
} catch (InterruptedException ex) {
logger.error("Response error for player " + getName() + " gameId: " + game.getId(), ex);
} finally {
game.pauseTimer(getTurnControlledBy());
boolean loop = true;
while (loop) {
loop = false;
synchronized (response) {
try {
response.wait();
} catch (InterruptedException ex) {
logger.error("Response error for player " + getName() + " gameId: " + game.getId(), ex);
} finally {
game.pauseTimer(getTurnControlledBy());
}
}
if (response.getResponseConcedeCheck()) {
((GameImpl) game).checkConcede();
if (game.hasEnded()) {
return;
}
response.clear();
loop = true;
}
}
if (recordingMacro && !macroTriggeredSelectionFlag) {
@ -1706,6 +1719,15 @@ public class HumanPlayer extends PlayerImpl {
}
}
@Override
public void signalPlayerConcede() {
synchronized (response) {
response.setResponseConcedeCheck();
response.notifyAll();
logger.debug("Set check concede for waiting player: " + getId());
}
}
@Override
public void skip() {
synchronized (response) {