diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/draft/DefaultDraft.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/draft/DefaultDraft.java index 0c1319671..ca371282c 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/draft/DefaultDraft.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/draft/DefaultDraft.java @@ -15,10 +15,10 @@ import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock; public class DefaultDraft implements Draft { - // 45 seconds - public static final int PICK_TIME = 45 * 1000; - // 20 minutes - public static final int DECK_BUILD_TIME = 20 * 60 * 1000; + // 35 seconds + public static final int PICK_TIME = 35 * 1000; + // 10 minutes + public static final int DECK_BUILD_TIME = 10 * 60 * 1000; private String _tournamentIdPrefix; private String _tournamentNamePrefix; @@ -108,16 +108,14 @@ public class DefaultDraft implements Draft { } @Override - public CardCollection getCardChoice(String playerName) { + public DraftCardChoice getCardChoice(String playerName) { _lock.readLock().lock(); try { if (_deckBuildingStarted) return null; MutableCardCollection cardChoice = _cardChoice.get(playerName); - if (cardChoice == null) - cardChoice = new DefaultCardCollection(); - return cardChoice; + return new DefaultDraftCardChoice(cardChoice, _lastPickStart + PICK_TIME); } finally { _lock.readLock().unlock(); } @@ -148,6 +146,16 @@ public class DefaultDraft implements Draft { } } + @Override + public boolean isPlayerInDraft(String player) { + for (Player playerInDraft : _players) { + if (playerInDraft.getName().equals(player)) + return true; + } + + return false; + } + private void startTournament(DraftCallback draftCallback) { String parameters = _format + "," + _collectionType.getCode() + "," + _collectionType.getFullName() + "," + _tournamentName; diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/draft/DefaultDraftCardChoice.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/draft/DefaultDraftCardChoice.java new file mode 100644 index 000000000..df1dfa949 --- /dev/null +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/draft/DefaultDraftCardChoice.java @@ -0,0 +1,23 @@ +package com.gempukku.lotro.draft; + +import com.gempukku.lotro.game.CardCollection; + +public class DefaultDraftCardChoice implements DraftCardChoice { + private CardCollection _cardCollection; + private long _pickEnd; + + public DefaultDraftCardChoice(CardCollection cardCollection, long pickEnd) { + _cardCollection = cardCollection; + _pickEnd = pickEnd; + } + + @Override + public long getTimeLeft() { + return _pickEnd - System.currentTimeMillis(); + } + + @Override + public CardCollection getCardCollection() { + return _cardCollection; + } +} diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/draft/Draft.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/draft/Draft.java index 39422daee..ca925a520 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/draft/Draft.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/draft/Draft.java @@ -1,6 +1,5 @@ package com.gempukku.lotro.draft; -import com.gempukku.lotro.game.CardCollection; import com.gempukku.lotro.game.DeckInvalidException; import com.gempukku.lotro.game.Player; import com.gempukku.lotro.logic.vo.LotroDeck; @@ -12,5 +11,7 @@ public interface Draft { public void playerSummittedDeck(Player player, LotroDeck deck) throws DeckInvalidException; - public CardCollection getCardChoice(String playerName); + public boolean isPlayerInDraft(String player); + + public DraftCardChoice getCardChoice(String playerName); } diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/draft/DraftCardChoice.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/draft/DraftCardChoice.java new file mode 100644 index 000000000..32302b56a --- /dev/null +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/draft/DraftCardChoice.java @@ -0,0 +1,9 @@ +package com.gempukku.lotro.draft; + +import com.gempukku.lotro.game.CardCollection; + +public interface DraftCardChoice { + public long getTimeLeft(); + + public CardCollection getCardCollection(); +} diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/hall/HallServer.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/hall/HallServer.java index 9fec5398c..8d20b296d 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/hall/HallServer.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/hall/HallServer.java @@ -8,6 +8,7 @@ import com.gempukku.lotro.collection.CollectionsManager; import com.gempukku.lotro.db.vo.CollectionType; import com.gempukku.lotro.db.vo.League; import com.gempukku.lotro.draft.Draft; +import com.gempukku.lotro.draft.DraftCallback; import com.gempukku.lotro.game.*; import com.gempukku.lotro.game.formats.LotroFormatLibrary; import com.gempukku.lotro.league.LeagueSerieData; @@ -48,7 +49,7 @@ public class HallServer extends AbstractServer { private Map _lastVisitedPlayers = new HashMap(); private List _runningTournaments = new ArrayList(); - private List _running = new ArrayList(); + private List _runningDrafts = new ArrayList(); private Map _tournamentQueues = new HashMap(); private final ChatRoomMediator _hallChat; @@ -449,6 +450,11 @@ public class HallServer extends AbstractServer { return true; } + for (Draft runningDraft : _runningDrafts) { + if (runningDraft.isPlayerInDraft(playerId)) + return true; + } + return false; } @@ -491,11 +497,30 @@ public class HallServer extends AbstractServer { } } + List runningDrafts = new ArrayList(_runningDrafts); + for (Draft runningDraft : runningDrafts) { + runningDraft.advanceDraft(new HallDraftCallback(runningDraft)); + } + } finally { _hallDataAccessLock.writeLock().unlock(); } } + private class HallDraftCallback implements DraftCallback { + private Draft _draft; + + private HallDraftCallback(Draft draft) { + _draft = draft; + } + + @Override + public void convertToTournament(Tournament tournament) { + _runningTournaments.add(tournament); + _runningDrafts.remove(_draft); + } + } + private class HallTournamentQueueCallback implements TournamentQueueCallback { @Override public void createTournament(Tournament tournament) {