From 03337221c991c647a0436ac1e5ec08c2645b2ab7 Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Sun, 12 Oct 2014 12:35:24 +0200 Subject: [PATCH] * Fixed draft start handling to prevent unneccessary waiting check start thread. --- .../mage/server/draft/DraftController.java | 27 ++++++++++--------- Mage/src/mage/game/draft/Draft.java | 4 +++ Mage/src/mage/game/draft/DraftImpl.java | 11 ++++++++ 3 files changed, 29 insertions(+), 13 deletions(-) diff --git a/Mage.Server/src/main/java/mage/server/draft/DraftController.java b/Mage.Server/src/main/java/mage/server/draft/DraftController.java index 87a7bb501a9..b39e18f19f9 100644 --- a/Mage.Server/src/main/java/mage/server/draft/DraftController.java +++ b/Mage.Server/src/main/java/mage/server/draft/DraftController.java @@ -149,19 +149,9 @@ public class DraftController { return false; } - private synchronized void startDraft() { - for (final Entry entry: draftSessions.entrySet()) { - if (!entry.getValue().init()) { - logger.fatal("Unable to initialize client for playerId " + entry.getKey()); - //TODO: generate client error message - return; - } - } - draft.start(); - } - - private void checkStart() { - if (allJoined()) { + private synchronized void checkStart() { + if (!draft.isStarted() && allJoined()) { + draft.setStarted(); ThreadExecutor.getInstance().getCallExecutor().execute( new Runnable() { @Override @@ -172,6 +162,17 @@ public class DraftController { } } + private void startDraft() { + for (final Entry entry: draftSessions.entrySet()) { + if (!entry.getValue().init()) { + logger.fatal("Unable to initialize client for playerId " + entry.getKey()); + //TODO: generate client error message + return; + } + } + draft.start(); + } + private boolean allJoined() { if (!draft.allJoined()) { return false; diff --git a/Mage/src/mage/game/draft/Draft.java b/Mage/src/mage/game/draft/Draft.java index 0c03a555206..12aef514840 100644 --- a/Mage/src/mage/game/draft/Draft.java +++ b/Mage/src/mage/game/draft/Draft.java @@ -56,6 +56,9 @@ public interface Draft extends MageItem, Serializable { int getCardNum(); boolean addPick(UUID playerId, UUID cardId); void start(); + boolean isStarted(); + void setStarted(); + boolean allJoined(); void leave(UUID playerId); void autoPick(UUID playerId); @@ -68,4 +71,5 @@ public interface Draft extends MageItem, Serializable { boolean isAbort(); void setAbort(boolean abort); + } diff --git a/Mage/src/mage/game/draft/DraftImpl.java b/Mage/src/mage/game/draft/DraftImpl.java index 79f52948fbb..7528bb29bbe 100644 --- a/Mage/src/mage/game/draft/DraftImpl.java +++ b/Mage/src/mage/game/draft/DraftImpl.java @@ -64,6 +64,7 @@ public abstract class DraftImpl implements Draft { protected int[] times = {75, 70, 65, 60, 55, 50, 45, 40, 35, 30, 25, 20, 15, 10, 5}; protected boolean abort = false; + protected boolean started = false; protected transient TableEventSource tableEventSource = new TableEventSource(); protected transient PlayerQueryEventSource playerQueryEventSource = new PlayerQueryEventSource(); @@ -340,4 +341,14 @@ public abstract class DraftImpl implements Draft { this.abort = abort; } + @Override + public boolean isStarted() { + return started; + } + + @Override + public void setStarted() { + started = true; + } + }