diff options
author | Matthias Schiffer <mschiffer@universe-factory.net> | 2011-06-22 05:44:23 +0200 |
---|---|---|
committer | Matthias Schiffer <mschiffer@universe-factory.net> | 2011-06-22 05:44:23 +0200 |
commit | 77e119e77d6834388b4943fd80bc3c8aed8ee67e (patch) | |
tree | d293b8fb2f539e56872090a2052606a2769de13e /src/jrummikub/control/network/NetworkGameControl.java | |
parent | ba421e2c8b06d3de3381a003a92d3be148a6548e (diff) | |
download | JRummikub-77e119e77d6834388b4943fd80bc3c8aed8ee67e.tar JRummikub-77e119e77d6834388b4943fd80bc3c8aed8ee67e.zip |
Correctly handle disappearing players during games
git-svn-id: svn://sunsvr01.isp.uni-luebeck.de/swproj13/trunk@577 72836036-5685-4462-b002-a69064685172
Diffstat (limited to 'src/jrummikub/control/network/NetworkGameControl.java')
-rw-r--r-- | src/jrummikub/control/network/NetworkGameControl.java | 30 |
1 files changed, 28 insertions, 2 deletions
diff --git a/src/jrummikub/control/network/NetworkGameControl.java b/src/jrummikub/control/network/NetworkGameControl.java index 768f0c3..262b380 100644 --- a/src/jrummikub/control/network/NetworkGameControl.java +++ b/src/jrummikub/control/network/NetworkGameControl.java @@ -7,6 +7,8 @@ import jrummikub.model.GameSettings; import jrummikub.model.IRoundState; import jrummikub.model.PlayerSettings; import jrummikub.model.PlayerSettings.Type; +import jrummikub.util.Event; +import jrummikub.util.IEvent; import jrummikub.util.IListener; import jrummikub.util.IListener1; import jrummikub.view.IView; @@ -18,6 +20,7 @@ import jrummikub.view.IView.BottomPanelType; public class NetworkGameControl extends GameControl { private IConnectionControl connectionControl; private boolean host; + private Event backEvent = new Event(); /** * Creates new network game control @@ -51,8 +54,7 @@ public class NetworkGameControl extends GameControl { for (PlayerSettings s : NetworkGameControl.this.gameSettings .getPlayerList()) { if (s.getName().equals(nickname) && s.getType() == Type.NETWORK) { - abortGame(); - view.setBottomPanel(BottomPanelType.NETWORK_CONNECTION_LOST_PANEL); + connectionLost(); return; } } @@ -60,6 +62,10 @@ public class NetworkGameControl extends GameControl { })); } + public IEvent getBackEvent() { + return backEvent; + } + @Override protected void startRound() { connections.add(connectionControl.getRoundStartEvent().add(new IListener() { @@ -89,4 +95,24 @@ public class NetworkGameControl extends GameControl { view.setBottomPanel(host ? BottomPanelType.WIN_PANEL : BottomPanelType.NETWORK_WIN_PANEL); } + + private void connectionLost() { + abortGame(); + + connections.add(view.getNewGameEvent().add(new IListener() { + @Override + public void handle() { + abortGame(); + backEvent.emit(); + } + })); + connections.add(view.getQuitEvent().add(new IListener() { + @Override + public void handle() { + System.exit(0); + } + })); + + view.setBottomPanel(BottomPanelType.NETWORK_CONNECTION_LOST_PANEL); + } } |