diff --git a/.gitattributes b/.gitattributes index f31d90bbad3..680ce876689 100644 --- a/.gitattributes +++ b/.gitattributes @@ -14579,7 +14579,6 @@ src/main/java/forge/control/FControlGameEventHandler.java -text src/main/java/forge/control/FControlGamePlayback.java -text src/main/java/forge/control/InputQueue.java svneol=native#text/plain src/main/java/forge/control/KeyboardShortcuts.java -text -src/main/java/forge/control/Lobby.java -text src/main/java/forge/control/RestartUtil.java -text src/main/java/forge/control/package-info.java -text src/main/java/forge/deck/CardCollections.java -text @@ -14975,8 +14974,10 @@ src/main/java/forge/model/BuildInfo.java -text src/main/java/forge/model/FModel.java svneol=native#text/plain src/main/java/forge/model/MultipleForgeJarsFoundError.java -text src/main/java/forge/model/package-info.java svneol=native#text/plain +src/main/java/forge/net/FServer.java -text src/main/java/forge/net/IClientSocket.java -text src/main/java/forge/net/IConnectionObserver.java -text +src/main/java/forge/net/Lobby.java -text src/main/java/forge/net/NetServer.java -text src/main/java/forge/net/client/INetClient.java -text src/main/java/forge/net/client/InvalidFieldInPacketException.java -text diff --git a/src/main/java/forge/GameLogFormatter.java b/src/main/java/forge/GameLogFormatter.java index e013dab6f3b..5f4bd8d7dae 100644 --- a/src/main/java/forge/GameLogFormatter.java +++ b/src/main/java/forge/GameLogFormatter.java @@ -29,6 +29,7 @@ import forge.game.player.LobbyPlayer; import forge.game.player.Player; import forge.game.player.PlayerStatistics; import forge.game.zone.ZoneType; +import forge.net.FServer; import forge.util.Lang; import forge.util.maps.MapOfLists; @@ -42,7 +43,7 @@ public class GameLogFormatter extends IGameEventVisitor.Base { @Override public GameLogEntry visit(GameEventGameOutcome ev) { // add result entries to the game log - final LobbyPlayer human = Singletons.getControl().getLobby().getGuiPlayer(); + final LobbyPlayer human = FServer.instance.getLobby().getGuiPlayer(); // This adds some extra entries to log final List outcomes = new ArrayList(); diff --git a/src/main/java/forge/control/FControl.java b/src/main/java/forge/control/FControl.java index 79e6d069c2d..73f0da19502 100644 --- a/src/main/java/forge/control/FControl.java +++ b/src/main/java/forge/control/FControl.java @@ -62,7 +62,7 @@ import forge.gui.match.controllers.CStack; import forge.gui.match.nonsingleton.VField; import forge.gui.match.views.VAntes; import forge.gui.toolbox.FSkin; -import forge.net.NetServer; +import forge.net.FServer; import forge.properties.ForgePreferences.FPref; import forge.properties.NewConstants; import forge.quest.QuestController; @@ -316,27 +316,16 @@ public enum FControl { if (children.length != 0) { children[0].setSize(display.getSize()); } } - /** - * TODO: Write javadoc for this method. - * @return - */ - private Lobby lobby = null; - public Lobby getLobby() { - if (lobby == null) { - lobby = new Lobby(); - } - return lobby; - } - + public Player getCurrentPlayer() { // try current priority Player currentPriority = game.getPhaseHandler().getPriorityPlayer(); - if( null != currentPriority && currentPriority.getLobbyPlayer() == getLobby().getGuiPlayer() ) + if( null != currentPriority && currentPriority.getLobbyPlayer() == FServer.instance.getLobby().getGuiPlayer() ) return currentPriority; // otherwise find just any player, belonging to this lobbyplayer for(Player p : game.getPlayers()) - if(p.getLobbyPlayer() == getLobby().getGuiPlayer() ) + if(p.getLobbyPlayer() == FServer.instance.getLobby().getGuiPlayer() ) return p; return null; @@ -354,16 +343,6 @@ public enum FControl { return soundSystem; } - /** - * TODO: Write javadoc for this method. - * @return - */ - private final NetServer server = new NetServer(); - public NetServer getServer() { - // TODO Auto-generated method stub - return server; - } - private Game game; private boolean gameHasHumanPlayer; @@ -374,7 +353,7 @@ public enum FControl { public final void stopGame() { List pp = new ArrayList(); for(Player p : game.getPlayers()) { - if ( p.getOriginalLobbyPlayer() == getLobby().getGuiPlayer() ) + if ( p.getOriginalLobbyPlayer() == FServer.instance.getLobby().getGuiPlayer() ) pp.add(p); } boolean hasHuman = !pp.isEmpty(); @@ -386,7 +365,7 @@ public enum FControl { p.concede(); Player priorityPlayer = game.getPhaseHandler().getPriorityPlayer(); - boolean humanHasPriority = priorityPlayer == null || priorityPlayer.getLobbyPlayer() == getLobby().getGuiPlayer(); + boolean humanHasPriority = priorityPlayer == null || priorityPlayer.getLobbyPlayer() == FServer.instance.getLobby().getGuiPlayer(); if ( hasHuman && humanHasPriority ) game.getAction().checkGameOverCondition(); @@ -428,7 +407,7 @@ public enum FControl { this.game = game0; game.subscribeToEvents(Singletons.getControl().getSoundSystem()); - LobbyPlayer humanLobbyPlayer = getLobby().getGuiPlayer(); + LobbyPlayer humanLobbyPlayer = FServer.instance.getLobby().getGuiPlayer(); // The UI controls should use these game data as models CMatchUI.SINGLETON_INSTANCE.initMatch(game.getRegisteredPlayers(), humanLobbyPlayer); CDock.SINGLETON_INSTANCE.setModel(game, humanLobbyPlayer); @@ -449,7 +428,7 @@ public enum FControl { // Add playback controls to match if needed gameHasHumanPlayer = false; for(Player p : game.getPlayers()) { - if ( p.getController().getLobbyPlayer() == getLobby().getGuiPlayer() ) + if ( p.getController().getLobbyPlayer() == FServer.instance.getLobby().getGuiPlayer() ) gameHasHumanPlayer = true; } diff --git a/src/main/java/forge/control/FControlGameEventHandler.java b/src/main/java/forge/control/FControlGameEventHandler.java index 8bfbad8ee3e..abd7b7b5fcb 100644 --- a/src/main/java/forge/control/FControlGameEventHandler.java +++ b/src/main/java/forge/control/FControlGameEventHandler.java @@ -53,6 +53,7 @@ import forge.gui.match.controllers.CMessage; import forge.gui.match.controllers.CStack; import forge.gui.match.nonsingleton.VHand; import forge.gui.toolbox.special.PhaseLabel; +import forge.net.FServer; import forge.util.maps.MapOfLists; public class FControlGameEventHandler extends IGameEventVisitor.Base { @@ -138,7 +139,7 @@ public class FControlGameEventHandler extends IGameEventVisitor.Base { return null; FThreads.invokeInEdtNowOrLater(new Runnable() { @Override public void run() { - CMatchUI.SINGLETON_INSTANCE.initHandViews(fc.getLobby().getGuiPlayer()); + CMatchUI.SINGLETON_INSTANCE.initHandViews(FServer.instance.getLobby().getGuiPlayer()); VMatchUI.SINGLETON_INSTANCE.populate(); for(VHand h : VMatchUI.SINGLETON_INSTANCE.getHands()) { h.getLayoutControl().updateHand(); @@ -282,7 +283,7 @@ public class FControlGameEventHandler extends IGameEventVisitor.Base { @Override public Void visit(GameEventAttackersDeclared event) { // Skip redraw for GUI player? - if ( event.player.getLobbyPlayer() == fc.getLobby().getGuiPlayer() ) + if ( event.player.getLobbyPlayer() == FServer.instance.getLobby().getGuiPlayer() ) return null; // Update all attackers. diff --git a/src/main/java/forge/game/limited/GauntletMini.java b/src/main/java/forge/game/limited/GauntletMini.java index c60ebaf0c9b..43c1172d3ca 100644 --- a/src/main/java/forge/game/limited/GauntletMini.java +++ b/src/main/java/forge/game/limited/GauntletMini.java @@ -24,12 +24,13 @@ import javax.swing.SwingUtilities; import forge.FThreads; import forge.Singletons; -import forge.control.Lobby; import forge.deck.Deck; import forge.game.GameType; import forge.game.Match; import forge.game.RegisteredPlayer; import forge.gui.SOverlayUtils; +import forge.net.FServer; +import forge.net.Lobby; /** *

@@ -162,7 +163,7 @@ public class GauntletMini { }); List starter = new ArrayList(); - Lobby lobby = Singletons.getControl().getLobby(); + Lobby lobby = FServer.instance.getLobby(); starter.add(RegisteredPlayer.fromDeck(humanDeck).setPlayer(lobby.getGuiPlayer())); starter.add(aiOpponents.get(currentRound - 1).setPlayer(lobby.getAiPlayer())); final Match mc = new Match(gauntletType, starter); diff --git a/src/main/java/forge/gui/FNetOverlay.java b/src/main/java/forge/gui/FNetOverlay.java index 7933cd83ed3..f69636e6bfd 100644 --- a/src/main/java/forge/gui/FNetOverlay.java +++ b/src/main/java/forge/gui/FNetOverlay.java @@ -17,14 +17,14 @@ import javax.swing.ScrollPaneConstants; import org.apache.commons.lang3.StringUtils; import net.miginfocom.swing.MigLayout; -import forge.Singletons; import forge.control.ChatArea; -import forge.control.Lobby; import forge.gui.toolbox.FLabel; import forge.gui.toolbox.FSkin; import forge.gui.toolbox.FTextArea; import forge.gui.toolbox.FTextField; import forge.gui.toolbox.SmartScroller; +import forge.net.FServer; +import forge.net.Lobby; /** * TODO: Write javadoc for this type. @@ -57,7 +57,7 @@ public enum FNetOverlay { if ( StringUtils.isBlank(message) ) return; - Lobby lobby = Singletons.getControl().getLobby(); + Lobby lobby = FServer.instance.getLobby(); lobby.speak(ChatArea.Room, lobby.getGuiPlayer(), message); } }; diff --git a/src/main/java/forge/gui/home/CHomeUI.java b/src/main/java/forge/gui/home/CHomeUI.java index b0d472e84c6..64b70a65e52 100644 --- a/src/main/java/forge/gui/home/CHomeUI.java +++ b/src/main/java/forge/gui/home/CHomeUI.java @@ -9,6 +9,7 @@ import forge.gui.deckeditor.controllers.CEditorConstructed; import forge.gui.framework.EDocID; import forge.gui.framework.ICDoc; import forge.gui.home.sanctioned.VSubmenuConstructed; +import forge.net.FServer; import forge.net.NetServer; import forge.properties.ForgePreferences; import forge.properties.NewConstants; @@ -81,7 +82,7 @@ public enum CHomeUI implements ICDoc { VHomeUI.SINGLETON_INSTANCE.getLblStartServer().setCommand(new Runnable() { @Override public void run() { - NetServer srv = Singletons.getControl().getServer(); + NetServer srv = FServer.instance.getServer(); srv.listen(NewConstants.SERVER_PORT_NUMBER); VHomeUI.SINGLETON_INSTANCE.getLblStopServer().setEnabled(true); @@ -94,7 +95,7 @@ public enum CHomeUI implements ICDoc { VHomeUI.SINGLETON_INSTANCE.getLblStopServer().setCommand(new Runnable() { @Override public void run() { - Singletons.getControl().getServer().stop(); + FServer.instance.getServer().stop(); VHomeUI.SINGLETON_INSTANCE.getLblStopServer().setEnabled(false); VHomeUI.SINGLETON_INSTANCE.getLblStartServer().setEnabled(true); diff --git a/src/main/java/forge/gui/home/gauntlet/CSubmenuGauntletContests.java b/src/main/java/forge/gui/home/gauntlet/CSubmenuGauntletContests.java index fe5330e37f8..1daa502624b 100644 --- a/src/main/java/forge/gui/home/gauntlet/CSubmenuGauntletContests.java +++ b/src/main/java/forge/gui/home/gauntlet/CSubmenuGauntletContests.java @@ -14,7 +14,6 @@ import javax.swing.SwingUtilities; import forge.Command; import forge.FThreads; import forge.Singletons; -import forge.control.Lobby; import forge.deck.Deck; import forge.deck.DeckgenUtil; import forge.game.GameType; @@ -24,6 +23,8 @@ import forge.gauntlet.GauntletData; import forge.gauntlet.GauntletIO; import forge.gui.SOverlayUtils; import forge.gui.framework.ICDoc; +import forge.net.FServer; +import forge.net.Lobby; /** * Controls the "gauntlet contests" submenu in the home UI. @@ -118,7 +119,7 @@ public enum CSubmenuGauntletContests implements ICDoc { Deck aiDeck = gd.getDecks().get(gd.getCompleted()); List starter = new ArrayList(); - Lobby lobby = Singletons.getControl().getLobby(); + Lobby lobby = FServer.instance.getLobby(); starter.add(RegisteredPlayer.fromDeck(gd.getUserDeck()).setPlayer(lobby.getGuiPlayer())); starter.add(RegisteredPlayer.fromDeck(aiDeck).setPlayer(lobby.getAiPlayer())); diff --git a/src/main/java/forge/gui/home/gauntlet/CSubmenuGauntletLoad.java b/src/main/java/forge/gui/home/gauntlet/CSubmenuGauntletLoad.java index 501ec99ce90..044f4b475f3 100644 --- a/src/main/java/forge/gui/home/gauntlet/CSubmenuGauntletLoad.java +++ b/src/main/java/forge/gui/home/gauntlet/CSubmenuGauntletLoad.java @@ -12,7 +12,6 @@ import javax.swing.SwingUtilities; import forge.Command; import forge.FThreads; import forge.Singletons; -import forge.control.Lobby; import forge.deck.Deck; import forge.game.GameType; import forge.game.Match; @@ -22,6 +21,8 @@ import forge.gauntlet.GauntletIO; import forge.gui.SOverlayUtils; import forge.gui.framework.ICDoc; import forge.gui.home.VHomeUI; +import forge.net.FServer; +import forge.net.Lobby; /** * Controls the "quick gauntlet" submenu in the home UI. @@ -110,7 +111,7 @@ public enum CSubmenuGauntletLoad implements ICDoc { final Deck aiDeck = gd.getDecks().get(gd.getCompleted()); List starter = new ArrayList(); - Lobby lobby = Singletons.getControl().getLobby(); + Lobby lobby = FServer.instance.getLobby(); starter.add(RegisteredPlayer.fromDeck(gd.getUserDeck()).setPlayer(lobby.getGuiPlayer())); starter.add(RegisteredPlayer.fromDeck(aiDeck).setPlayer(lobby.getAiPlayer())); diff --git a/src/main/java/forge/gui/home/gauntlet/CSubmenuGauntletQuick.java b/src/main/java/forge/gui/home/gauntlet/CSubmenuGauntletQuick.java index 75243debe65..6a912273c9b 100644 --- a/src/main/java/forge/gui/home/gauntlet/CSubmenuGauntletQuick.java +++ b/src/main/java/forge/gui/home/gauntlet/CSubmenuGauntletQuick.java @@ -13,7 +13,6 @@ import javax.swing.SwingUtilities; import forge.Command; import forge.FThreads; import forge.Singletons; -import forge.control.Lobby; import forge.deck.Deck; import forge.deck.DeckgenUtil; import forge.deck.DeckgenUtil.DeckTypes; @@ -24,6 +23,8 @@ import forge.gauntlet.GauntletData; import forge.gauntlet.GauntletIO; import forge.gui.SOverlayUtils; import forge.gui.framework.ICDoc; +import forge.net.FServer; +import forge.net.Lobby; /** * Controls the "quick gauntlet" submenu in the home UI. @@ -144,7 +145,7 @@ public enum CSubmenuGauntletQuick implements ICDoc { final Deck aiDeck = gd.getDecks().get(gd.getCompleted()); List starter = new ArrayList(); - Lobby lobby = Singletons.getControl().getLobby(); + Lobby lobby = FServer.instance.getLobby(); starter.add(RegisteredPlayer.fromDeck(gd.getUserDeck()).setPlayer(lobby.getGuiPlayer())); starter.add(RegisteredPlayer.fromDeck(aiDeck).setPlayer(lobby.getAiPlayer())); diff --git a/src/main/java/forge/gui/home/quest/SSubmenuQuestUtil.java b/src/main/java/forge/gui/home/quest/SSubmenuQuestUtil.java index b2adb308b0f..81e49e80396 100644 --- a/src/main/java/forge/gui/home/quest/SSubmenuQuestUtil.java +++ b/src/main/java/forge/gui/home/quest/SSubmenuQuestUtil.java @@ -14,7 +14,6 @@ import forge.FThreads; import forge.Singletons; import forge.card.CardEdition; import forge.control.FControl; -import forge.control.Lobby; import forge.deck.Deck; import forge.game.GameType; import forge.game.Match; @@ -25,6 +24,8 @@ import forge.gui.SOverlayUtils; import forge.gui.deckeditor.CDeckEditorUI; import forge.gui.deckeditor.controllers.CEditorQuestCardShop; import forge.gui.toolbox.FSkin; +import forge.net.FServer; +import forge.net.Lobby; import forge.quest.QuestController; import forge.quest.QuestEvent; import forge.quest.QuestEventChallenge; @@ -433,10 +434,9 @@ public class SSubmenuQuestUtil { } List starter = new ArrayList(); - Lobby lobby = Singletons.getControl().getLobby(); + Lobby lobby = FServer.instance.getLobby(); starter.add(humanStart.setPlayer(lobby.getQuestPlayer())); - - LobbyPlayer aiPlayer = Singletons.getControl().getLobby().getAiPlayer(event.getOpponent() == null ? event.getTitle() : event.getOpponent()); + LobbyPlayer aiPlayer = FServer.instance.getLobby().getAiPlayer(event.getOpponent() == null ? event.getTitle() : event.getOpponent()); aiPlayer.setIconImageKey(event.getIconImageKey()); starter.add(aiStart.setPlayer(aiPlayer)); diff --git a/src/main/java/forge/gui/home/sanctioned/CSubmenuConstructed.java b/src/main/java/forge/gui/home/sanctioned/CSubmenuConstructed.java index 18fa9723a41..782ecdd403a 100644 --- a/src/main/java/forge/gui/home/sanctioned/CSubmenuConstructed.java +++ b/src/main/java/forge/gui/home/sanctioned/CSubmenuConstructed.java @@ -10,13 +10,14 @@ import javax.swing.SwingUtilities; import forge.Command; import forge.FThreads; import forge.Singletons; -import forge.control.Lobby; import forge.game.GameType; import forge.game.Match; import forge.game.RegisteredPlayer; import forge.game.player.LobbyPlayer; import forge.gui.SOverlayUtils; import forge.gui.framework.ICDoc; +import forge.net.FServer; +import forge.net.Lobby; import forge.properties.ForgePreferences; import forge.properties.ForgePreferences.FPref; @@ -116,8 +117,7 @@ public enum CSubmenuConstructed implements ICDoc { JOptionPane.showMessageDialog(null, "Left-side deck " + aiDeckErrorMessage, "Invalid deck", JOptionPane.ERROR_MESSAGE); return; } - - Lobby lobby = Singletons.getControl().getLobby(); + Lobby lobby = FServer.instance.getLobby(); LobbyPlayer rightPlayer = view.isRightPlayerAi() ? lobby.getAiPlayer() : lobby.getGuiPlayer(); LobbyPlayer leftPlayer = view.isLeftPlayerAi() ? lobby.getAiPlayer() : lobby.getGuiPlayer(); diff --git a/src/main/java/forge/gui/home/sanctioned/CSubmenuDraft.java b/src/main/java/forge/gui/home/sanctioned/CSubmenuDraft.java index ee7e47faa85..f854bc27c58 100644 --- a/src/main/java/forge/gui/home/sanctioned/CSubmenuDraft.java +++ b/src/main/java/forge/gui/home/sanctioned/CSubmenuDraft.java @@ -13,7 +13,6 @@ import forge.Command; import forge.FThreads; import forge.Singletons; import forge.control.FControl; -import forge.control.Lobby; import forge.deck.Deck; import forge.deck.DeckGroup; import forge.game.GameType; @@ -26,6 +25,8 @@ import forge.gui.SOverlayUtils; import forge.gui.deckeditor.CDeckEditorUI; import forge.gui.deckeditor.controllers.CEditorDraftingProcess; import forge.gui.framework.ICDoc; +import forge.net.FServer; +import forge.net.Lobby; /** * Controls the draft submenu in the home UI. @@ -132,7 +133,7 @@ public enum CSubmenuDraft implements ICDoc { } List starter = new ArrayList(); - Lobby lobby = Singletons.getControl().getLobby(); + Lobby lobby = FServer.instance.getLobby(); starter.add(RegisteredPlayer.fromDeck(humanDeck).setPlayer(lobby.getGuiPlayer())); starter.add(RegisteredPlayer.fromDeck(aiDeck).setPlayer(lobby.getAiPlayer())); diff --git a/src/main/java/forge/gui/home/variant/CSubmenuArchenemy.java b/src/main/java/forge/gui/home/variant/CSubmenuArchenemy.java index ea08a02b9e2..6c832952be1 100644 --- a/src/main/java/forge/gui/home/variant/CSubmenuArchenemy.java +++ b/src/main/java/forge/gui/home/variant/CSubmenuArchenemy.java @@ -14,7 +14,6 @@ import forge.Command; import forge.FThreads; import forge.Singletons; import forge.control.FControl; -import forge.control.Lobby; import forge.deck.Deck; import forge.deck.DeckSection; import forge.deck.DeckgenUtil; @@ -30,6 +29,8 @@ import forge.gui.framework.ICDoc; import forge.gui.toolbox.FList; import forge.gui.toolbox.special.FDeckChooser; import forge.item.PaperCard; +import forge.net.FServer; +import forge.net.Lobby; import forge.properties.ForgePreferences; import forge.properties.ForgePreferences.FPref; import forge.util.Aggregates; @@ -218,7 +219,7 @@ public enum CSubmenuArchenemy implements ICDoc { SOverlayUtils.startGameOverlay(); SOverlayUtils.showOverlay(); - Lobby lobby = Singletons.getControl().getLobby(); + Lobby lobby = FServer.instance.getLobby(); List players = new ArrayList(); for (int i = 0; i < view.getNumPlayers(); i++) { diff --git a/src/main/java/forge/gui/home/variant/CSubmenuPlanechase.java b/src/main/java/forge/gui/home/variant/CSubmenuPlanechase.java index bb3326786ea..bebaff71d25 100644 --- a/src/main/java/forge/gui/home/variant/CSubmenuPlanechase.java +++ b/src/main/java/forge/gui/home/variant/CSubmenuPlanechase.java @@ -14,7 +14,6 @@ import forge.Command; import forge.FThreads; import forge.Singletons; import forge.control.FControl; -import forge.control.Lobby; import forge.deck.Deck; import forge.deck.DeckSection; import forge.deck.DeckgenUtil; @@ -31,6 +30,8 @@ import forge.gui.framework.ICDoc; import forge.gui.toolbox.FList; import forge.gui.toolbox.special.FDeckChooser; import forge.item.PaperCard; +import forge.net.FServer; +import forge.net.Lobby; import forge.properties.ForgePreferences; import forge.properties.ForgePreferences.FPref; import forge.util.Aggregates; @@ -149,7 +150,7 @@ public enum CSubmenuPlanechase implements ICDoc { /** @param lists0   {@link java.util.List}<{@link javax.swing.JList}> */ private void startGame() { - Lobby lobby = Singletons.getControl().getLobby(); + Lobby lobby = FServer.instance.getLobby(); List helper = new ArrayList(); List playerDecks = new ArrayList(); for (int i = 0; i < view.getNumPlayers(); i++) { diff --git a/src/main/java/forge/gui/home/variant/CSubmenuVanguard.java b/src/main/java/forge/gui/home/variant/CSubmenuVanguard.java index 077e7e4c7ce..30eef2f32b1 100644 --- a/src/main/java/forge/gui/home/variant/CSubmenuVanguard.java +++ b/src/main/java/forge/gui/home/variant/CSubmenuVanguard.java @@ -13,7 +13,6 @@ import com.google.common.collect.Iterables; import forge.Command; import forge.FThreads; import forge.Singletons; -import forge.control.Lobby; import forge.deck.Deck; import forge.deck.DeckSection; import forge.game.GameType; @@ -25,6 +24,8 @@ import forge.gui.SOverlayUtils; import forge.gui.framework.ICDoc; import forge.gui.toolbox.special.FDeckChooser; import forge.item.PaperCard; +import forge.net.FServer; +import forge.net.Lobby; import forge.properties.ForgePreferences; import forge.properties.ForgePreferences.FPref; @@ -171,7 +172,7 @@ public enum CSubmenuVanguard implements ICDoc { GuiDialog.message(defaultAvatarInfo.toString()); } - Lobby lobby = Singletons.getControl().getLobby(); + Lobby lobby = FServer.instance.getLobby(); List helper = new ArrayList(); for (int i = 0; i < view.getNumPlayers(); i++) { LobbyPlayer player = i == 0 ? lobby.getGuiPlayer() : lobby.getAiPlayer(); diff --git a/src/main/java/forge/gui/match/ControlWinLose.java b/src/main/java/forge/gui/match/ControlWinLose.java index 8936cf52ff7..c0c1fd06402 100644 --- a/src/main/java/forge/gui/match/ControlWinLose.java +++ b/src/main/java/forge/gui/match/ControlWinLose.java @@ -22,6 +22,7 @@ import forge.game.zone.ZoneType; import forge.gui.GuiChoose; import forge.gui.SOverlayUtils; import forge.item.PaperCard; +import forge.net.FServer; import forge.properties.ForgePreferences.FPref; /** @@ -144,10 +145,10 @@ public class ControlWinLose { for (int i = 0; i < cntPlayers; i++ ) { Player fromGame = lastGame.getRegisteredPlayers().get(i); - if( !fromGame.hasWon()) continue; // not a loser + if( !fromGame.hasWon()) continue; // offer to winner, if he is local human - if (fromGame.getController().getLobbyPlayer() == Singletons.getControl().getLobby().getGuiPlayer()) { + if (fromGame.getController().getLobbyPlayer() == FServer.instance.getLobby().getGuiPlayer()) { List chosen = GuiChoose.noneOrMany("Select cards to add to your deck", losses); if (null != chosen) { RegisteredPlayer psc = match.getPlayers().get(i); diff --git a/src/main/java/forge/gui/match/GauntletWinLose.java b/src/main/java/forge/gui/match/GauntletWinLose.java index d6352f86632..c1fbb264cac 100644 --- a/src/main/java/forge/gui/match/GauntletWinLose.java +++ b/src/main/java/forge/gui/match/GauntletWinLose.java @@ -28,7 +28,6 @@ import com.google.common.collect.Lists; import net.miginfocom.swing.MigLayout; import forge.Singletons; -import forge.control.Lobby; import forge.deck.Deck; import forge.game.Game; import forge.game.GameType; @@ -40,6 +39,8 @@ import forge.gauntlet.GauntletIO; import forge.gui.SOverlayUtils; import forge.gui.toolbox.FLabel; import forge.gui.toolbox.FSkin; +import forge.net.FServer; +import forge.net.Lobby; /** * The Win/Lose handler for 'gauntlet' type tournament @@ -81,13 +82,13 @@ public class GauntletWinLose extends ControlWinLose { lstEventRecords.set(gd.getCompleted(), "Ongoing"); final Match match = lastGame.getMatch(); - + // Match won't be saved until it is over. This opens up a cheat // or failsafe mechanism (depending on your perspective) in which // the player can restart Forge to replay a match. // Pretty sure this can't be fixed until in-game states can be // saved. Doublestrike 07-10-12 - LobbyPlayer questPlayer = Singletons.getControl().getLobby().getQuestPlayer(); + LobbyPlayer questPlayer = FServer.instance.getLobby().getQuestPlayer(); // In all cases, update stats. lstEventRecords.set(gd.getCompleted(), match.getGamesWonBy(questPlayer) + " - " @@ -201,7 +202,7 @@ public class GauntletWinLose extends ControlWinLose { GauntletData gd = Singletons.getModel().getGauntletData(); Deck aiDeck = gd.getDecks().get(gd.getCompleted()); List players = Lists.newArrayList(); - Lobby lobby = Singletons.getControl().getLobby(); + Lobby lobby = FServer.instance.getLobby(); players.add(RegisteredPlayer.fromDeck(gd.getUserDeck()).setPlayer(lobby.getGuiPlayer())); players.add(RegisteredPlayer.fromDeck(aiDeck).setPlayer(lobby.getAiPlayer())); diff --git a/src/main/java/forge/gui/match/LimitedWinLose.java b/src/main/java/forge/gui/match/LimitedWinLose.java index 1f46fd08fe8..f0592f5ad57 100644 --- a/src/main/java/forge/gui/match/LimitedWinLose.java +++ b/src/main/java/forge/gui/match/LimitedWinLose.java @@ -29,6 +29,7 @@ import forge.game.Game; import forge.game.limited.GauntletMini; import forge.gui.SOverlayUtils; import forge.gui.toolbox.FSkin; +import forge.net.FServer; /** * The Win/Lose handler for 'gauntlet' type tournament @@ -58,7 +59,7 @@ public class LimitedWinLose extends ControlWinLose { super(view0, lastGame); this.view = view0; gauntlet = Singletons.getModel().getGauntletMini(); - this.wonMatch = lastGame.getMatch().isWonBy(Singletons.getControl().getLobby().getGuiPlayer()); + this.wonMatch = lastGame.getMatch().isWonBy(FServer.instance.getLobby().getGuiPlayer()); } @@ -79,7 +80,7 @@ public class LimitedWinLose extends ControlWinLose { resetView(); nextRound = false; - if (lastGame.getOutcome().isWinner(Singletons.getControl().getLobby().getGuiPlayer())) { + if (lastGame.getOutcome().isWinner(FServer.instance.getLobby().getGuiPlayer())) { gauntlet.addWin(); } else { gauntlet.addLoss(); diff --git a/src/main/java/forge/gui/match/QuestWinLose.java b/src/main/java/forge/gui/match/QuestWinLose.java index 32c867352de..2581de3197c 100644 --- a/src/main/java/forge/gui/match/QuestWinLose.java +++ b/src/main/java/forge/gui/match/QuestWinLose.java @@ -60,6 +60,7 @@ import forge.item.PaperCard; import forge.item.InventoryItem; import forge.item.OpenablePack; import forge.item.TournamentPack; +import forge.net.FServer; import forge.properties.ForgePreferences.FPref; import forge.quest.IQuestRewardCard; import forge.quest.QuestController; @@ -108,7 +109,7 @@ public class QuestWinLose extends ControlWinLose { this.view = view0; qData = Singletons.getModel().getQuest(); qEvent = qData.getCurrentEvent(); - this.wonMatch = lastGame.getMatch().isWonBy(Singletons.getControl().getLobby().getQuestPlayer()); + this.wonMatch = lastGame.getMatch().isWonBy(FServer.instance.getLobby().getQuestPlayer()); this.isAnte = Singletons.getModel().getPreferences().getPrefBoolean(FPref.UI_ANTE); } @@ -127,7 +128,7 @@ public class QuestWinLose extends ControlWinLose { this.getView().getBtnRestart().setVisible(false); QuestController qc = Singletons.getModel().getQuest(); - LobbyPlayer questPlayer = Singletons.getControl().getLobby().getQuestPlayer(); + LobbyPlayer questPlayer = FServer.instance.getLobby().getQuestPlayer(); if (isAnte) { //do per-game actions GameOutcome outcome = lastGame.getOutcome(); @@ -342,7 +343,7 @@ public class QuestWinLose extends ControlWinLose { // Gameplay bonuses (for each game win) boolean hasNeverLost = true; - LobbyPlayer localHuman = Singletons.getControl().getLobby().getQuestPlayer(); + LobbyPlayer localHuman = FServer.instance.getLobby().getQuestPlayer(); for (final GameOutcome game : lastGame.getMatch().getPlayedGames()) { if (!game.isWinner(localHuman)) { hasNeverLost = false; diff --git a/src/main/java/forge/gui/match/ViewWinLose.java b/src/main/java/forge/gui/match/ViewWinLose.java index e9b24e8f5c0..2521cd66ca9 100644 --- a/src/main/java/forge/gui/match/ViewWinLose.java +++ b/src/main/java/forge/gui/match/ViewWinLose.java @@ -29,6 +29,7 @@ import forge.gui.toolbox.FOverlay; import forge.gui.toolbox.FScrollPane; import forge.gui.toolbox.FSkin; import forge.gui.toolbox.FTextArea; +import forge.net.FServer; /** * TODO: Write javadoc for this type. @@ -192,7 +193,7 @@ public class ViewWinLose { } private String composeTitle(GameOutcome outcome) { - LobbyPlayer guiPlayer = Singletons.getControl().getLobby().getGuiPlayer(); + LobbyPlayer guiPlayer = FServer.instance.getLobby().getGuiPlayer(); int nHumansInGame = 0; for(Pair pps : outcome) { if( pps.getKey() == guiPlayer ) diff --git a/src/main/java/forge/net/FServer.java b/src/main/java/forge/net/FServer.java new file mode 100644 index 00000000000..91ddcd05e64 --- /dev/null +++ b/src/main/java/forge/net/FServer.java @@ -0,0 +1,31 @@ +package forge.net; + + +/** + * TODO: Write javadoc for this type. + * + */ +public enum FServer { + instance(); + + private Lobby lobby = null; + + public Lobby getLobby() { + if (lobby == null) { + lobby = new Lobby(); + } + return lobby; + } + + /** + * TODO: Write javadoc for this method. + * @return + */ + private final NetServer server = new NetServer(); + public NetServer getServer() { + // TODO Auto-generated method stub + return server; + } + + +} diff --git a/src/main/java/forge/control/Lobby.java b/src/main/java/forge/net/Lobby.java similarity index 97% rename from src/main/java/forge/control/Lobby.java rename to src/main/java/forge/net/Lobby.java index 0093d46010e..8b7a16ca109 100644 --- a/src/main/java/forge/control/Lobby.java +++ b/src/main/java/forge/net/Lobby.java @@ -1,9 +1,10 @@ -package forge.control; +package forge.net; import java.util.Map; import java.util.Random; import java.util.concurrent.ConcurrentHashMap; +import forge.control.ChatArea; import forge.game.player.LobbyPlayer; import forge.game.player.LobbyPlayerAi; import forge.game.player.LobbyPlayerHuman; diff --git a/src/main/java/forge/net/client/NetClient.java b/src/main/java/forge/net/client/NetClient.java index 5fd81cccc09..d8be54ebe10 100644 --- a/src/main/java/forge/net/client/NetClient.java +++ b/src/main/java/forge/net/client/NetClient.java @@ -3,8 +3,8 @@ package forge.net.client; import java.util.concurrent.BlockingDeque; import java.util.concurrent.LinkedBlockingDeque; -import forge.Singletons; import forge.game.player.LobbyPlayer; +import forge.net.FServer; import forge.net.IClientSocket; import forge.net.IConnectionObserver; import forge.net.client.state.ConnectedClientState; @@ -44,7 +44,9 @@ public class NetClient implements IConnectionObserver, INetClient{ @Override public void onConnectionClosed() { // Tell the game, the client is gone. - if ( player != null ) Singletons.getControl().getLobby().disconnectPlayer(player); + if ( player != null ) { + FServer.instance.getLobby().disconnectPlayer(player); + } } @@ -81,7 +83,7 @@ public class NetClient implements IConnectionObserver, INetClient{ */ @Override public final void createPlayer(String name) { - player = Singletons.getControl().getLobby().findOrCreateRemotePlayer(name, this); + player = FServer.instance.getLobby().findOrCreateRemotePlayer(name, this); } /* (non-Javadoc) diff --git a/src/main/java/forge/net/client/state/InLobbyClientState.java b/src/main/java/forge/net/client/state/InLobbyClientState.java index 306f7046037..4e7c084b37f 100644 --- a/src/main/java/forge/net/client/state/InLobbyClientState.java +++ b/src/main/java/forge/net/client/state/InLobbyClientState.java @@ -1,7 +1,7 @@ package forge.net.client.state; -import forge.Singletons; import forge.control.ChatArea; +import forge.net.FServer; import forge.net.client.INetClient; import forge.net.protocol.toserver.ChatPacketSrv; import forge.net.protocol.toserver.IPacketSrv; @@ -22,7 +22,7 @@ public class InLobbyClientState implements IClientState { if( data instanceof ChatPacketSrv) { ChatPacketSrv cp = (ChatPacketSrv) data; // if ( not muted ) - Singletons.getControl().getLobby().speak(ChatArea.Room, client.getPlayer(), cp.getMessage()); + FServer.instance.getLobby().speak(ChatArea.Room, client.getPlayer(), cp.getMessage()); // else // client.send("You are banned and cannot speak"); return true; diff --git a/src/main/java/forge/quest/QuestController.java b/src/main/java/forge/quest/QuestController.java index 14b271f7653..ebb12c31c57 100644 --- a/src/main/java/forge/quest/QuestController.java +++ b/src/main/java/forge/quest/QuestController.java @@ -33,6 +33,7 @@ import forge.game.event.GameEvent; import forge.game.event.GameEventMulligan; import forge.item.PaperCard; import forge.item.PreconDeck; +import forge.net.FServer; import forge.properties.NewConstants; import forge.quest.bazaar.QuestBazaarManager; import forge.quest.bazaar.QuestItemType; @@ -430,7 +431,7 @@ public class QuestController { if ( ev instanceof GameEventMulligan ) { GameEventMulligan mev = (GameEventMulligan)ev; // First mulligan is free - if (mev.player.getLobbyPlayer() == Singletons.getControl().getLobby().getQuestPlayer() + if (mev.player.getLobbyPlayer() == FServer.instance.getLobby().getQuestPlayer() && getAssets().hasItem(QuestItemType.SLEIGHT) && mev.player.getStats().getMulliganCount() == 0) { mev.player.drawCard(); } diff --git a/src/main/java/forge/sound/EventVisualizer.java b/src/main/java/forge/sound/EventVisualizer.java index 24ca82be3a9..647b6ee0e2a 100644 --- a/src/main/java/forge/sound/EventVisualizer.java +++ b/src/main/java/forge/sound/EventVisualizer.java @@ -3,7 +3,6 @@ package forge.sound; import java.util.Collection; import forge.Card; -import forge.Singletons; import forge.card.spellability.SpellAbility; import forge.game.event.GameEventBlockersDeclared; import forge.game.event.GameEventCardChangeZone; @@ -29,6 +28,7 @@ import forge.game.zone.ZoneType; import forge.gui.events.IUiEventVisitor; import forge.gui.events.UiEventAttackerDeclared; import forge.gui.events.UiEventBlockerAssigned; +import forge.net.FServer; import forge.util.maps.MapOfLists; /** @@ -60,7 +60,7 @@ public class EventVisualizer extends IGameEventVisitor.Base imp public SoundEffectType visit(GameEventShuffle event) { return SoundEffectType.Shuffle; } public SoundEffectType visit(GameEventTokenCreated event) { return SoundEffectType.Token; } public SoundEffectType visit(GameEventBlockersDeclared event) { - boolean isLocalHuman = event.defendingPlayer.getLobbyPlayer() == Singletons.getControl().getLobby().getGuiPlayer(); + boolean isLocalHuman = event.defendingPlayer.getLobbyPlayer() == FServer.instance.getLobby().getGuiPlayer(); if (isLocalHuman) return null; // already played sounds in interactive mode @@ -79,7 +79,7 @@ public class EventVisualizer extends IGameEventVisitor.Base imp * Plays the sound corresponding to the outcome of the duel. */ public SoundEffectType visit(GameEventGameOutcome event) { - boolean humanWonTheDuel = event.result.getWinner() == Singletons.getControl().getLobby().getGuiPlayer(); + boolean humanWonTheDuel = event.result.getWinner() == FServer.instance.getLobby().getGuiPlayer(); return humanWonTheDuel ? SoundEffectType.WinDuel : SoundEffectType.LoseDuel; }