mirror of
https://github.com/magefree/mage.git
synced 2025-12-28 14:32:06 -08:00
Fixed player leaving/conceding handling.
This commit is contained in:
parent
79d4c07d20
commit
58d3fc2328
21 changed files with 553 additions and 463 deletions
|
|
@ -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) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue