From 77e119e77d6834388b4943fd80bc3c8aed8ee67e Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Wed, 22 Jun 2011 05:44:23 +0200 Subject: Correctly handle disappearing players during games git-svn-id: svn://sunsvr01.isp.uni-luebeck.de/swproj13/trunk@577 72836036-5685-4462-b002-a69064685172 --- .../control/network/NetworkGameControl.java | 30 ++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) (limited to 'src/jrummikub/control/network/NetworkGameControl.java') 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); + } } -- cgit v1.2.3